【问题标题】:Why does `ls | cat` != `ls`?为什么`ls |猫`!=`ls`?
【发布时间】:2014-05-02 00:28:28
【问题描述】:

为什么这两个命令的输出会有差异:

ls | cat

ls

第一个似乎用换行符分隔文件名。

这也适用于命令 suc 有 ls > outfile 和类似的东西。

我使用的是 Mac OSX,如果这有什么不同的话。

【问题讨论】:

    标签: bash shell unix


    【解决方案1】:

    ls 命令检查其标准输出的文件类型。如果它检测到“tty”,它会发出多列输出。如果它检测到任何其他文件类型(如磁盘文件或管道),它会发出单列输出。

    Tty 是电传打字机的缩写。在过去,您将使用实际的电传打字机与 Unix 系统进行交互。因此,如果标准输出是电传打字机,ls 将产生针对人类优化的输出。否则,它会产生针对程序优化的输出。

    随着运行交互式 shell 的其他方式的出现,例如 telnet 会话和窗口系统,Unix 作者创建了伪电传打字机或“pty”,这是一种伪装成电传打字机的纯软件“设备”。一个程序(如 telnet 服务器、ssh 服务器或终端窗口)可以使用 pty 使另一个程序(shell)认为它正在与电传打字机交谈。

    您可以使用-C 标志强制ls 发出多列输出。您可以使用-1(数字一)标志来强制单列输出。

    【讨论】:

    • +1,但我认为你的意思是-1,而不是-x,强制单列输出; -x 仍然产生 multi-column 输出,但“条目按列排序,而不是向下排序”。 - man.cx/ls
    猜你喜欢
    • 2015-11-10
    • 2016-12-04
    • 2015-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 2015-01-05
    相关资源
    最近更新 更多