Command-Line

是否可以使用管道或其他東西建構命令循環?

  • November 24, 2021

到目前為止,我知道管道機制是一種連接一系列命令的方法,方法是將一個命令的標準輸出連接到下一個命令的標準輸入,直到到達最後一個命令,它將其標準輸出與顯示或文件連接起來。

但是,是否有可能對命令進行循環,因此最後一個命令的標準輸出連接到第一個命令的標準輸入,並且可能通過使用 tee 以某種方式顯示某個輸出的變化值?

那麼你當然可以只做一個循環並使用變數:

while true; do
   a=$(echo "$a" | grep "Hey" | cut -d" " -f2 | tee -a log)
done

這將保存將在開始時再次使用的最後一個輸出

我不確定所有的 shell,但在 Bash 中它是可能的,雖然不是使用未命名的管道。所以不是用|符號。但是如果你創建一個命名管道:

mkfifo fifo

然後你可以使用它:

<fifo cat | cat >fifo &

現在管道在後台工作,但什麼也不做。但是,如果您從管道外部進給管道:

echo x >fifo

管道將解除阻塞並永遠持續下去。或者直到你排幹管道:

cat fifo

輸出將出現一次:

x

為了使它有點複雜,管道可能是這樣的:

<fifo cat | xargs -I@ echo @x >fifo &

所以它會x在每次迭代時向輸出添加一個。當然會,但只有在迭代開始時,這意味著一旦管道解除阻塞,即一旦有東西要讀取。如前所述,這可以手動啟動:

echo x >fifo

現在看看top顯示了什麼。cat和應該有相當多的活動xargs

和之前一樣,如果把管道排幹,應該x會在終端看到很多s,管道就會阻塞。

這將是一個有效的問題,為什麼管道會被耗盡。為什麼cat在終端中送出的命令在電路中沒有任何內容。我不知道這個。

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