Bash
在這種情況下,為什麼程序替換比管道快?
我想知道為什麼
ls -1 | while read file; do echo $file; tail -n 100 $file > >(sleep 1 && cat > $file) done
比
ls -1 | while read file; do echo $file; tail -n 100 $file | (sleep 1 && cat > $file) done
?
如果目錄中有 100 個文件,則:
- 第二個命令需要將近 100 秒來處理
- 第一個命令幾乎立即被處理。
當您使用管道時,shell 會同時執行管道中的每個命令,並等待所有命令完成,然後再執行下一個命令。這在文件中進行了解釋:
如果管道不是非同步執行的(參見Lists),shell 會等待管道中的所有命令完成。
當上面提到非同步執行管道時,它是指在後台執行整個管道
&
。當您使用程序替換時,shell 不會等待它完成。文件只是說:
程序列表非同步執行,其輸入或輸出顯示為文件名。