Xargs
為什麼 xargs 不能與 tail -f 一起使用?
我想要
tail -f /var/log/syslog | grep
模式“arpwatch”並通過jabber將每一行發送給自己:xmpp username@jabber.server
使用xargstail -f /var/log/syslog | grep arpwatch | xargs sendxmpp username@jabber.server
不工作。
但
tail /var/log/syslog | grep arpwatch | sendxmpp username@jabber.server
效果很好。
我認為這是一些基本的事情
xargs
,tail -f
我不明白。
xargs *command*
嘗試在一次命令呼叫中收集盡可能多的輸入項(行、單詞) ,並且它並不特別關心輸入數據的時間。如果tail
程序被殺死,或者xargs
緩衝區被填滿,它將使用它收到的參數執行命令。但是,tail -f
通常不會自行完成,並且命令行參數的限制可能很大,所以它似乎根本不起作用。您可以使用
xargs -n1
它一次只將一個輸入項傳遞給commandxargs
,但是您會被使用空格將輸入拆分為項的事實所打擊,因此輸入行foo bar
會導致命令執行兩次。使用 GNU xargs,
xargs -n1 -d '\n'
應該做你想做的事:為每個輸入行執行一次命令,將整行作為單個參數傳遞。嘗試,例如有和沒有
-d
and-n
並記下輸出時間:$ ( echo "123 456"; sleep 1; echo foo; sleep 1; echo doo ) | xargs -d '\n' -n1 printf ':%s\n'
xargs -L 1
也可以,但它仍會將行拆分為單獨的參數,而不是將整行作為一個參數傳遞。