スクリプトに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
この変更は役に立ちますか?
出力をecho "some info" > final.csv
からcat temp.csv >> final.csv
にパイプしているため、これらの2つのコマンド(echo
およびcat
)は並列に実行されます。
そのため、final.csv
に何が入るかは、スケジュールされるプログラムによって異なります。やりたいことは、その|
を;
に置き換えることです。そして、echo
コマンドは終了するまで実行され、その後のみcat
が開始されます。
|
平均pipe
==前のコマンドの出力パイプ先次のコマンド入力。 > final.csv
を使用すると、echo
の出力がファイルにリダイレクトされ、パイプする必要がなくなります。したがって、修正するには、上記の2つのコマンドを個別に使用するか、必要に応じてパイプを使用します
echo "some info" | cat - temp.csv > final.csv
他の人も同じことをする
cat - temp.csv <<<"some info" > final.csv