2014-05-02 55 views
7

爲什麼會出現這兩種命令之間的輸出差:爲什麼`ls |貓`!=`ls`?

ls | cat 

ls 

第一個似乎與換行分開的文件名。

這也適用於命令suc有ls > outfile和類似的東西。

我在Mac OSX上,如果這有什麼區別。

回答

10

ls命令檢查其標準輸出的文件類型。如果它檢測到「tty」,它會發出多列輸出。如果它檢測到任何其他文件類型(如磁盤文件或管道),它將發出單列輸出。

Tty是電傳打字機的縮寫。在過去,您可以使用實際的電傳類型與Unix系統進行交互。所以如果標準輸出是電傳打字機,ls會產生爲人類優化的輸出。否則,它會產生爲程序優化的輸出。隨着其他運行交互式shell的方式(如telnet會話和窗口系統)的出現,Unix的作者創建了僞電傳類型或「pty」,這是一種純軟件「設備」,它僞裝成電傳。一個程序(如telnet服務器,ssh服務器或終端窗口)可以使用pty使另一個程序(shell)認爲它正在與電傳打字。

您可以使用-C標誌強制ls發出多列輸出。您可以使用-1(數字一)標誌強制單列輸出。

+1

+1,但我認爲你的意思是'-1',而不是'-x',強制_single_-column的輸出; '-x'仍然會產生_multi_-column輸出,但是「輸入的是排序的列,而不是列的列。」 - http://man.cx/ls – mklement0

+0

@ mklement0謝謝。我糾正了我的答案。 –