web-dev-qa-db-ja.com

エコー、パイプ、猫の組み合わせ

スクリプトにtemp.csvというファイル名があります。中間ステップの1つは

echo "some info" > final.csv | cat temp.csv >> final.csv

ファイルfinal.csvは、temp.csvにあるデータなしで作成される場合があります(スケジューラーを介して実行されている場合)。次に、ジョブを再実行すると、final.csvが期待どおりに作成されます。

なぜこのようになっているのですか(コマンドecho "some info" > final.csv | cat temp.csv >> final.csvで正確に何が起こっているのですか)?
コマンドを次のように置き換えた場合:

echo "some info" > final.csv ; cat temp.csv >> final.csv 

この変更は役に立ちますか?

4
Aravind

出力をecho "some info" > final.csvからcat temp.csv >> final.csvにパイプしているため、これらの2つのコマンド(echoおよびcat)は並列に実行されます。

そのため、final.csvに何が入るかは、スケジュールされるプログラムによって異なります。やりたいことは、その|;に置き換えることです。そして、echoコマンドは終了するまで実行され、その後のみcatが開始されます。

4
Anthon

|平均pipe ==前のコマンドの出力パイプ先次のコマンド入力。 > final.csvを使用すると、echoの出力がファイルにリダイレクトされ、パイプする必要がなくなります。したがって、修正するには、上記の2つのコマンドを個別に使用するか、必要に応じてパイプを使用します

echo "some info" | cat - temp.csv > final.csv

他の人も同じことをする

cat - temp.csv <<<"some info" > final.csv
2
Costas