2017-09-14 68 views
0

我有興趣在grep輸出中保留輸入的標題,就像在Include header in the 'grep' result這個問題中一樣。爲什麼到命令組的管道只能用於某些命令?

雖然工作解決方案(使用sed)在問題中出現,但answer with most upvotes引起了我的注意。例如,它允許使用grep --color。這表明管道輸入到command group與命令headgrep,如:

ps -ef | { head -1; grep python; } 

然而,寫在鏈接的答案和註釋,這並不適用於所有的命令在管道的左側工作。它適用於pslsof,但不適用於df,ls等。當使用它們時,只有該組中的第一命令的輸出被打印:

$ df | { head -1; grep '/'; } 
Filesystem         1K-blocks  Used Available Use% Mounted on 
$ 

任何人都可以解釋爲什麼管道的命令組僅適用於某些命令?有什麼辦法可以使它普遍工作嗎?

+0

一般來說,我認爲你不應該依賴接收任何輸入的第二個命令。 –

+0

您可以使用'awk'打印第一行或匹配的行......'ps -ef | awk'NR == 1 || /蟒/'' –

回答

1

您的問題的答案在comments of the linked answer

顯然ps -e先發送標題行,然後不發送任何內容,然後緩衝其餘的輸出。 head必須認爲該流在第一行後關閉,因此它退出,剩下grep

它只是偶然的工作。

有沒有什麼辦法讓它普遍使用?

一切皆有可能,但是,您可能需要重新編碼並重新編譯其他所有內容。所以...不可能,對不起。