プロセス置換を使用するのと同じですか?

プロセス置換を使用するのと同じですか?

プロセス交換を使用するかどうか

command1 <(command2)

等しい

command2 > ~/myfile
command1 ~myfile

上記の2つを互いに交換できますか?

コマンド置換を使用するとcommand1、常に同時に実行されますが、「交換」では実行が完了した後にのみ実行されますか?command2command1command2

それでは、この違いによって両者が同じではなく、どのような場合には常に交換が可能ではないでしょうか。

ありがとうございます。

答え1

これはプロセスの交換

あなたが提供する2つのフォームの最終結果は本質的に同じでなければなりません。

  • 指摘したように、プロセスの交換は同時に2つのプロセスを実行します。
  • 2番目のフォームはファイルシステムのファイルを使用するため、ファイルを保存するためのスペースが必要です(理想的には後で削除することをお勧めします)。

技術的には、プロセスの交換に関連するプロセス間I / Oは、ファイルではなくパイプのように動作します。 (しかし、これは実装の詳細である可能性が高いです。)

正しく書かれたプログラムは違いを示してはいけません。結果たとえば、同時に実行されるからです。

tail -n 1 <(seq 1 10000000)

手動で試している間、シーケンスの最後の数字を正しく表示します。

seq 1 10000000 > blah &
tail -n 1 blah

tail実行時に保存された最後の行が表示され、完了するのを待たないため失敗しますseq。この場合、2番目のフォームは正しく待機します。

しかし、一見すると違いが見えます行動。例えば、

head -n 1 <(seq 1 1000000000)

すぐに完了しますが(seqパイプライン動作による)

seq 1 1000000000 > blah
head -n 1 blah

実行に時間がかなりかかります。このタイプの違いは、ある形式を別の形式に置き換えることが不適切であることを意味する可能性があります。

関連情報