管道化cat和ls命令

时间:2016-10-31 17:09:01

标签: linux pipeline cat ls

我是linux的新手。当我尝试这个时,我一直在学习cat命令。

harish@harish-Lenovo-G50-45:~$ cat file
Videos/Arrow/Season*
harish@harish-Lenovo-G50-45:~$ cat file | ls -l

该命令显示当前文件夹的内容而不是文件中提到的文件夹..但是当我这样做时

harish@harish-Lenovo-G50-45:~$ cat file
Videos/Arrow/Season*
harish@harish-Lenovo-G50-45:~$ ls -l $(cat file) 

预期文件夹的内容正确显示。为什么我不能在这种情况下使用管道?

1 个答案:

答案 0 :(得分:0)

在第一个示例中,您将cat file的输出传递给ls -l的输入。由于ls -l不接受任何输入,因此它不会对cat file的输出执行任何操作。但是在第二个示例中,您使用$(cat file)cat file的输出放在传递给ls -l的参数的位置,而这次ls -l的文本在file内{ {1}}在适合的地方做某事。这里的问题是注意到程序的标准输入和程序的参数之间的区别。标准输入是您在C中调用scanf时所拥有的输入;并且参数是在作为参数传递给主过程的argv指针中获得的。