为什么ls在管道输出时会提供不同的输出

kev*_*kev 8 bash

直接打印到终端:

$ ls
a.out  avg.c  avg.h
Run Code Online (Sandbox Code Playgroud)

管道到 cat

$ ls | cat
a.out
avg.c
avg.h
Run Code Online (Sandbox Code Playgroud)

为什么ls根据目的地提供不同的输出?

Den*_*nis 6

ls自动表现得像ls -1管道.

这通常是你想要的,当你通过管道lsawk或类似的东西,因为它会将输出ls一行一行地的基础.

要覆盖此默认行为,您可以使用ls -C | cat.


Chr*_*rle 6

ls实际上可以确定它是输出到终端还是文件(使用isatty库调用).如果它检测到控制台,它会尝试使其更紧凑,以便于查看.