Grep
管道 ls 到 grep(行與“項目”)
考慮以下命令:
ls dir1 dir2 file1 x1 x2 y2
當此輸出通過管道傳輸到例如 grep 中時,每個文件/目錄都作為“項目”處理。
ls | grep f file1
ls
所以很明顯 a產生的實際輸出和 grep 處理的輸入是有區別的。由於 grep 在行上執行,因此可以預期
ls | grep f
會顯示整個第一行,即:dir1 dir2 file1
我在這裡想念什麼?這種行為背後的機制是什麼?
命令可以檢測其輸出何時會發送到 TTY 或不發送到 TTY。因此,在這種特殊情況下,當
ls
檢測到其輸出不會發送到 TTY 時,它的行為就像-1
是作為參數傳遞一樣。您可以看到這一點,並且使用以下
grep
命令並沒有做任何特別的事情cat
:ls | cat
要查看
ls
重定向其輸出時的行為,您可以嘗試執行ls | cat
或者
ls -1
這是
ls
當它的輸出不去 TTY 時的行為方式。