通过管道 ls 到 grep(行与“项目”)

通过管道 ls 到 grep(行与“项目”)

考虑以下命令:

ls
dir1 dir2 file1
x1   x2   y2

当此输出通过管道传输到例如 grep 时,每个文件/目录都将作为“项目”进行处理。

ls | grep f
file1

ls显然,a产生的实际输出和 grep 处理的输入之间存在区别。

由于 grep 在行上运行,因此可以预期ls | grep f会显示整个第一行,即:dir1 dir2 file1

我在这里缺少什么?这种行为背后的机制是什么?

答案1

命令可以检测其输出何时发送至 TTY。因此,在这种特殊情况下,当ls检测到其输出不会发送到 TTY 时,它的行为就像-1作为参数传递一样。

你可以看到这一点,这并grep没有通过使用做任何特别的事情cat

ls | cat

答案2

要查看ls其输出被重定向时的行为方式,您可以尝试运行

ls | cat

或者

ls -1

这是ls当其输出不发送至 TTY 时的行为方式。

相关内容