为什么这两个命令之间的输出存在差异:
ls | cat
ls
第一个似乎是用换行符分隔文件名。
这也适用于命令suc ls > outfile
以及类似的东西。
我在Mac OSX上,如果这有任何区别。
答案 0 :(得分:10)
ls
命令检查其标准输出的文件类型。如果它检测到“tty”,则会发出多列输出。如果它检测到任何其他文件类型(如磁盘文件或管道),则会发出单列输出。
Tty是电传打字机的缩写。在过去,您将使用实际的电传打字机与Unix系统进行交互。因此,如果标准输出是电传打字机,ls
将产生针对人类优化的输出。否则,它将产生针对程序优化的输出。
随着运行交互式shell的其他方式的出现,如telnet会话和窗口系统,Unix作者创建了伪电传类型或“pty”,这是一种纯软件设备,它假装是电传打字机。一个程序(如telnet服务器,ssh服务器或终端窗口)可以使用pty使另一个程序(shell)认为它正在与电传打字对话。
您可以使用-C
标志强制ls
发出多列输出。您可以使用-1
(数字1)标志强制单列输出。