運行此:不打印通過兩個命令
ping google.com | grep -o 'PING'
將打印PING
到終端,所以我假定意味着grep的的標準輸出由終端捕獲。
那麼爲什麼不按照下面的命令打印什麼?終端只是掛:
ping google.com | grep -o 'PING' | grep -o 'IN'
我認爲,第一grep命令的標準輸出將被重定向到第二的grep的標準輸入。然後第二個grep的標準輸出將被終端捕獲並打印。
這似乎是,如果平被替換回聲會發生什麼:
echo 'PING' | grep -o 'PING' | grep -o 'IN'
IN
被打印到終端,如我期望的那樣。
那麼ping
有什麼特別之處,可以防止打印任何東西?
瞭解grep的'--line-buffered'選項。它會解決你的問題 – RomanPerekhrest
嘗試'ping -c 5',以便在5次嘗試後停止。 –
@RomanPerekhrest謝謝!但我不確定爲什麼這個選項使它工作或如何推廣解決方案。其他命令也存在這個問題,如perl:'ping google.com | perl -pe''| grep -o'IN'輸出什麼也沒有,並且perl似乎沒有相同的選項。 – Robz