例如,假設有一個程式被呼叫foo,該程式會在需要時列印一個新行。foo列印新行時如何運行另一個程式?
foo 例子:
while true; do
echo hi
sleep 1
done
我不能編輯 foo
uj5u.com熱心網友回復:
這是我認為可以滿足您目的的功能:
function my_function { while true; do read && "$@" ; done ; }
要在prog每次程式foo列印出一行時運行一個程式,您可以在終端中這樣寫:
foo | my_function prog
如果您想將arg1和arg2作為引數傳遞給“prog”,您可以這樣稱呼它(謝謝@Ulrich Eckhardt 和@glenn jackman):
foo | my_function prog arg1 arg2
uj5u.com熱心網友回復:
正如評論中已經建議的那樣,您可以使用while read對來自foo.
foo |
while IFS= read -r line; do
# maybe echo "$line"?
echo "hi"
done
有一些選項read允許使用與換行符不同的輸入分隔符。
如果您只真正關心在一行到達時做某事,而不關心換行之前的實際輸出,那么這可以簡化很多。該-r選項和IFS=賦值有助于保留line回圈內部的精確內容(具體來說,IFS=防止外殼從輸入值中修剪空格,并且該-r選項禁用反斜杠的決議,這通常是您不想要的)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/361164.html
標籤:猛击
