Bashスクリプトはディレクトリを変更しません

Bashスクリプトはディレクトリを変更しません

一部の文字列を読み取る必要がある小さなスクリプトを作成しています。

#!/bin/bash
echo "Enter SUID: "
read $uid
echo "Enter Tag Number: "
read $dicomTag

dicomDump() {
        arg1=$1
        cd ~/export/"$1"
        dcmdump *.dcm > dcmResults.txt
}
tagFinder() {
        arg1=$1
        arg2=$2
        for i in $(cat ~/export/"$1"/dcmResults.txt); do grep "$2" | >> tagResults.txt
        break
done;
}
dicomDump "$uid"
#tagFinder "$uid" "$dicomTag"

最初に目立つのは、 dicomDump() 関数ではディレクトリを変更しないことです。lsコードがまだ残っている間にコードにアクセスしたときに気づいたもう1つのことpwdは、dcmdump(私のサーバー上のプログラムへのシンボリックリンク、ここで*はワイルドカード)を使用しようとしていることです。スクリプトを実行するたびに、次のようになります。

E: dcmdump: No such file or directory: reading file: *.dcm

スクリプトがディレクトリを元に変更しない理由と、dcmdumpプログラムを実行させる方法を教えてください。

答え1

あなたはreadそれを間違って使用しました。

echo "Enter SUID: "
read $uid
echo "Enter Tag Number: "
read $dicomTag

しなければならない

echo "Enter SUID: "
read uid
echo "Enter Tag Number: "
read dicomTag

実際には、read変数 "uid"を空の文字列に拡張する "$uid"引数を使用して呼び出してから(まだ設定されていないため)、シェルはその単語を引数リストからreadそのまま削除します。空で引用されていません。これにより、read変数名を指定せずに応答を保存せずにフォームを呼び出すことができます$REPLY

関連情報