シェルチェックレポート:
echo -e "blah/blah\n$(cat "$tmpdir"/"$filename".jpdf)" > "$tmpdir"/"$filename".jpdf
^-- SC2094: Make sure not to read and write the same file in the same pipeline.
^-- SC2094: Make sure not to read and write the same file in the same pipeline.
blah/blah
このコマンドの目的は、ファイルの先頭に行を挿入することです"$tmpdir"/"$filename".jpdf
。
「同じパイプで同じファイルを読み書きしないでください」とはどういう意味ですか?
どうすればいいですか?
ありがとうございます。
ベストアンサー1
他の回答で指摘したように、同じファイルを読み書きすると、ファイルが消去されるという警告が表示されます。その理由は、>
入力が完了する前にファイルが切り捨てられるためです。
2つの選択肢があります。
sponge
梱包を取り外して使用してくださいmoreutils
。sponge
次のコマンドにパイプする前に、入力が完全に消費されていることを確認してください。変える
command "$file" > "$file"
する
command "$file" | sponge "$file"
出力を別のファイルにリダイレクトし、名前を変更します。
このように
command "$file" > "$file2" && mv "$file2" "$file"
特定の質問に関連してファイルに「何か、あまりにも」を追加すると、そのsed
オプションがサポートされている場合に-i
機能します。例えばGNU
sed
:
sed '1i\
blah/blah' -i "$file"