Bash

在這種情況下,為什麼程序替換比管道快?

  • March 30, 2018

我想知道為什麼

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 不會等待它完成。文件只是說:

程序列表非同步執行,其輸入或輸出顯示為文件名。

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