我想我可能忽略了关于 shell 的一个相对基本的观点。默认情况下,ls命令的输出用换行符分隔输出,但 shell 将输出显示在一行上。
任何人都可以向我解释这一点吗?我一直假设输出只是由空格分隔,但现在我看到输出由换行符分隔,我希望输出显示在单独的行上。
例子:
cpoweradm@debian:~/lpi103-4$ ls text*
text1 text2 text3
Run Code Online (Sandbox Code Playgroud)
od显示输出由换行符分隔:
cpoweradm@debian:~/lpi103-4$ ls text* | od -c
0000000 t e x t 1 \n t e x t 2 \n t e x t
0000020 3 \n
0000022
Run Code Online (Sandbox Code Playgroud)
如果存在换行符,那么为什么输出不显示为:
text1
text2
text3
Run Code Online (Sandbox Code Playgroud) 如果我运行,ls
我会得到彩色输出,我发现它非常方便快速浏览文件类型。当我尝试通过管道将其less
与-r
和-R
标记均匀时,颜色总是会丢失。我使用的是zsh
5.0.7 版。有任何想法吗?谢谢。
编辑:我在 OS X 上。
命令如何ls
知道它的标准输出是什么?
ls
根据目标标准输出的不同,操作似乎有所不同。例如,如果我这样做:
ls /home/matt/tmp
Run Code Online (Sandbox Code Playgroud)
结果是:
a.txt b.txt c.txt
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做
ls /home/matt/tmp | cat
Run Code Online (Sandbox Code Playgroud)
结果是(即每个结果换行):
a.txt
b.txt
c.txt
Run Code Online (Sandbox Code Playgroud)
该进程为标准输出传递了一个文件描述符 1 对吗?它如何确定如何格式化结果?文件描述符是否显示信息?