存在するプロセスの交換2つの構文を見ることができます。
>(command_list)
そして
<(command_list)
私はしばしば2番目の構文を使用します。ところで、2つの違いが何であるかわかりませんか?検索した結果、特別な結果は出ませんでした。
答え1
使用する:
consumer <(feeder)
~のため出力ofはstdinから入力を取得できない場合(この場合は使用する)feeder
に供給されますが、引数として指定されたファイル名からのみ入力を取得できます。consumer
consumer
feeder | cousumer
この場合、feeder
出力はパイプの書き込みの終わりであり、拡張子は<(feeder)
ファイル名(/dev/fd/<x>
サポートされていないシステムでは名前付きパイプである可能性がありますが通常)であり、/dev/fd/<n>
一度開くと(によって)consumer
読むチューブの終わりです。
対称的に以下を使用します。
feeder >(consumer)
feeder
出力をstdout(再実行できます)に送信せずにfeeder | consumer
名前を引数として渡す必要があるファイルに送信するコマンドの場合。
consumer
だから入力するはパイプの読み取り端であり、パイプの書き込み端に達するために>(consumer)
開くと(経由で渡された)ファイル名に展開されます。feeder
<(...)
次のように複数の入力が必要なコマンドに役立つため、より一般的に使用されます。
diff -u <(cmd1) <(cmd2)
コマンドが複数の出力を生成したり、コマンドが出力をstdoutに送信できない場合は一般的ではありません。一般的な例外は次のとおりです。
feeder | tee >(consumer1) >(consumer2) | consumer3
その中には、tee
いくつかの出力を複数のファイル(stdoutに加えて)に並列に送信する一般的なコマンドがあります。
次のような内容を見たことがあります。
tar cf - somedir |
gzip -9 |
tee >(shasum > dir.tgz.shasum) >(md5sum > dir.tgz.md5sum) > dir.tgz
チェックサムを作成して保存しながら、出力gzip
(ここでは圧縮されたtarアーカイブ)を出力ファイルに送信します。shasum
md5sum