職場では、エコー出力の長いリストをデスクトップに.txtファイルとして保存するのに多くの困難があります。私はヨセミテ10.10.4でBashを使用しています。私は初めてBashに触れたので、助けとヒントをいただきありがとうございます。
目的は、各脳スキャンに使用されるプロトコル名を印刷して、長い脳スキャンリストを取得することです。私はforループを使用して各脳スキャンを再帰的に進め、使用されたプロトコルを抽出し、その情報を取得するために使用された正確なファイルのパスで再エコーしました。
私のスクリプト:
for i in /Path/to/scans/
do
for file in "$i/"001*/0001.dcm
do
# If there is no such file here, just skip this scan.
if [ ! -f "$file" ]
then
echo "Skipping $i, no 0001.dcm file here" >&2
continue
fi
# Otherwise take the protocol data from scan out
line= dcmdump +P 0040,0254 0001.dcm
## dcmdump is the command line tool needed to pull out this data.
## In my case I am saving to variable "line" the protocol used in
## the scan that this single 0001.dcm file belongs to (scans require
## many .dcm files but each one contains this kind of meta-data).
# Print the result
echo "$line $file"
break
done
done
したがって、このスクリプトはほとんど機能します。 [マイターミナル]ウィンドウには、使用されているプロトコルの長いリストと、各スキャンに使用された0001.dcmファイルの絶対ファイルパスが表示されます。
私の問題は、私がそれを変えるとき
echo "$line $file" >> /Users/me/Desktop/scanparametersoutput.txt
私のデスクトップに表示されるテキストファイルは空です。私が間違っていることを知っている人はいますか?
ベストアンサー1
スクリプトで発生した問題の1つは、次のようになります。
line= dcmdump +P 0040,0254 0001.dcm
dcmdump
出力を代入する代わりに、set to という環境変数を使用してline
コマンドを実行します。これについてもっと読むことができます。dcmdump
line
''
ここ。
dcmdump
したがって、実際に見ているのは何も割り当てられていない$line
ための出力ではなく、実行中のスクリプトの出力です。$line
プログラムの出力をキャプチャするには、次の構文を使用します。
line=$(dcmdump +P 0040,0254 0001.dcm)
=
(また、セキュリティ上の理由から、ロゴの前後にスペースはありません。)
$()
サブシェルの角かっこ内のコードを実行し、コード出力に「代替」します。
0001.dcm
これをコマンドでもdcmdump
使いたいかもしれませんが$file
、私はそれに慣れていないので皆さんにお任せします。