Bash 为什么ls在管道传输时提供不同的输出
直接打印到终端:Bash 为什么ls在管道传输时提供不同的输出,bash,Bash,直接打印到终端: $ ls a.out avg.c avg.h 管道至cat $ ls | cat a.out avg.c avg.h 为什么ls会根据目的地提供不同的输出?ls在管道传输时会自动执行类似于ls-1 这通常是您在将ls输送到awk或类似设备时所需要的,因为它将逐行处理ls的输出 要覆盖此默认行为,您可以使用ls-C | catls实际确定它是输出到终端还是文件(使用isatty库调用)。如果它检测到控制台,它将尝试使其更紧凑,以便更容易查看。因此每行仅为一个条目,从而允许
$ ls
a.out avg.c avg.h
管道至cat
$ ls | cat
a.out
avg.c
avg.h
为什么
ls
会根据目的地提供不同的输出?ls
在管道传输时会自动执行类似于ls-1
这通常是您在将ls
输送到awk
或类似设备时所需要的,因为它将逐行处理ls
的输出
要覆盖此默认行为,您可以使用
ls-C | cat
ls
实际确定它是输出到终端还是文件(使用isatty
库调用)。如果它检测到控制台,它将尝试使其更紧凑,以便更容易查看。因此每行仅为一个条目,从而允许输出管道传输到的命令按预期工作。例如(给定ls
输出),以下可能不是您想要的:
$ ls | sort -r
a.out avg.c avg.h
但是因为sort
不知道每行有多个项目,所以它什么也做不了。将其与实际发生的情况进行比较:
$ ls | sort -r
avg.h
avg.c
a.out
您可以通过将<代码> -c>代码>传递到<代码> ls fWW,从而实现这种(意想不到的)第一种行为,我认为这种行为被打破了。当所说的命令在发送到不同地方时改变输出时,能够轻松地将巨大的命令管道连接在一起的悠久传统变得更加困难。此外,它在管道中不使用颜色。因此,如果您想要彩色转义码,可以使用
ls-C--color=yes | cat
。它可以用于ls-C--color=yes | less-R