直接打印到终端:
$ ls
a.out avg.c avg.h
管道到cat
$ ls | cat
a.out
avg.c
avg.h
为什么ls
根据目的地提供不同的输出?
答案 0 :(得分:6)
ls
会自动表现为ls -1
。
这通常是您将ls
传递给awk
之类的东西,或类似的东西,因为它会逐行处理ls
的输出。
要覆盖此默认行为,您可以使用ls -C | cat
。
答案 1 :(得分:6)
ls
实际上可以确定它是输出到终端还是文件(使用isatty
库调用)。如果它检测到控制台,它会尝试使其更紧凑,以便于查看。
答案 2 :(得分:1)
因此,每行只是一个条目,允许输出通过管道输出的命令工作,这可能是预期的。例如(给定ls
输出),以下可能不是您想要的:
$ ls | sort -r
a.out avg.c avg.h
但是因为sort
不知道每行有多个项目,所以它无能为力。将其与实际情况进行比较:
$ ls | sort -r
avg.h
avg.c
a.out
您可以将-C
传递给ls
来实现(意外)第一个行为。