Linux

程序替換中 <(commands) 和 >(commands) 的區別

  • September 14, 2020

程序替換中,我可以看到兩種語法:

>(command_list)

&lt;(command_list)

我經常使用第二種語法。但我不知道兩者之間到底有什麼區別?搜尋它沒有什麼特別的。

你用:

consumer &lt;(feeder)

對於要饋送到的輸出,when不能從 stdin 獲取其輸入(在這種情況下,您只需使用),而只能從作為參數給出的文件名中獲取。feeder``consumer``consumer``feeder | cousumer

在這種情況下,feeder的輸出是管道的寫入端,而擴展的&lt;(feeder)是文件名(通常/dev/fd/&lt;x&gt;,儘管在不支持的系統上可能是命名管道/dev/fd/&lt;n&gt;),一旦打開(by consumer)就可以讀取那個管道的末端。

對稱地,您使用:

feeder &gt;(consumer)

對於那些feeder不將其輸出發送到標準輸出(您可以feeder | consumer再次執行)但發送到您需要將其名稱作為參數傳遞的文件的命令。

Thenconsumer輸入是管道的讀取端,並&gt;(consumer)擴展為一個文件名,一旦打開(by feeder),您就可以到達該管道的寫入端。

它更常用,&lt;(...)因為它在需要多個輸入的命令中很有用,例如:

diff -u &lt;(cmd1) &lt;(cmd2)

雖然命令產生多個輸出或命令不能將其輸出發送到標準輸出的情況不太常見。一個常見的例外是:

feeder | tee &gt;(consumer1) &gt;(consumer2) | consumer3

wheretee是一個典型的命令,它將一些輸出並行發送到多個文件(除了標準輸出)。

你可能已經看到了類似的東西:

tar cf - somedir |
gzip -9 |
tee &gt;(shasum &gt; dir.tgz.shasum) &gt;(md5sum &gt; dir.tgz.md5sum) &gt; dir.tgz

gzip(這裡是壓縮的 tar 存檔)的輸出發送到輸出文件,同時shasum生成md5sum和儲存校驗和。

引用自:https://unix.stackexchange.com/questions/609375