![通过管道 ls 到 grep(行与“项目”)](https://linux22.com/image/90280/%E9%80%9A%E8%BF%87%E7%AE%A1%E9%81%93%20ls%20%E5%88%B0%20grep%EF%BC%88%E8%A1%8C%E4%B8%8E%E2%80%9C%E9%A1%B9%E7%9B%AE%E2%80%9D%EF%BC%89.png)
考虑以下命令:
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 时的行为方式。