考えるとこのQ&Aリダイレクトに関連するシェルの実行順序に関して、ファイルが存在しない場合、ファイルが存在しないと文句を言わないように最初に生成されるというcat example.txt | shuf > example.txt
事実にもかかわらず、これは私の理解に基づく確認です。私のシステムで約1,000回に1回発生します(バックアップには各行に15個の静的値が含まれています)。
for i in $(seq 1 1000); do
cp backup test
echo $i
cat test | shuf > test
cat test
done
そんなようですが、どのように例外がありますか?ルール?
答え1
ここで:
cat test | shuf > test
>
優先順位は次のことを意味します。
(cat test) | (shuf > test)
いいえ:
(cat test | shuf) > test
2つの異なるファイルを使用しても、2つのグループ間に違いはありません。
同じファイルで作業するときに重要なのは、パイプの両側にある2つのコマンドです。同時実行。これらのコマンドcat test
はとですshuf > test
。 >
「書き込みと切り抜きのために開く」を意味し、「読み込みのcat
ために開く」とは、読み込みと閉じを意味する。この二つのことが起きているから同時に、彼らの集団的な運用順序の間の関係は次のとおりです。無期限。シェルがファイルの切り捨てを管理する前にcat
ファイルを取得できます。shuf > test
しかし、より多くの要因が関連しているので、これは小さな機会です。cat
非常に幸運な状況でのみ発生します。スケジューリングのshuf > test
。
物語の教訓:これをしないでください。代わりに2つのファイルを使用してください。