Command-Line
是否可以使用管道或其他東西建構命令循環?
到目前為止,我知道管道機制是一種連接一系列命令的方法,方法是將一個命令的標準輸出連接到下一個命令的標準輸入,直到到達最後一個命令,它將其標準輸出與顯示或文件連接起來。
但是,是否有可能對命令進行循環,因此最後一個命令的標準輸出連接到第一個命令的標準輸入,並且可能通過使用 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
在終端中送出的命令在電路中沒有任何內容。我不知道這個。