bash - 为什么 `ls | cat` != `ls` ?

标签 bash shell unix

为什么这两个命令的输出不同:

ls | cat

ls

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

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

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

最佳答案

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

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

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

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

关于bash - 为什么 `ls | cat` != `ls` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23418904/

相关文章:

shell - 在文件名末尾添加序列号 - Shell 脚本

C: sbrk() 地址升序还是降序?

c - gdb 调试器最棘手/有用的命令

linux - bash 查找带有整数的行直到下一个字符串

python - VirtualEnv 从 bash 脚本初始化

mysql查询从同一个表中选择两列

python - 在 Python 程序中嵌入 Python shell

linux - 从命令行启动 matlab 后,linux 终端中缺少某些内容

linux - 使用管道缩短 bash 脚本

linux - 在 Unix 中使用静态库的更好做法?