cat 和 ls 命令的流水线化
Pipelining of cat and ls commands
我是 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)
预期文件夹的内容显示正确。为什么我不能在这种情况下使用管道?
在第一个示例中,您将 cat file
的输出传递给 ls -l
的输入。由于 ls -l
不接受任何输入,因此它不会对 cat file
的输出做任何事情。但是,在第二个示例中,您使用的是 $(cat file)
,它将 cat file
的输出放在传递给 ls -l
的参数的位置,这次 ls -l
的文本位于 file
在正确的地方用它做点什么。这里的问题是注意程序的标准输入和程序的参数之间的区别。例如,标准输入就是您在 C 中调用 scanf
时所拥有的;参数是您在作为参数传递给主过程的 argv
指针中得到的。
我是 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)
预期文件夹的内容显示正确。为什么我不能在这种情况下使用管道?
在第一个示例中,您将 cat file
的输出传递给 ls -l
的输入。由于 ls -l
不接受任何输入,因此它不会对 cat file
的输出做任何事情。但是,在第二个示例中,您使用的是 $(cat file)
,它将 cat file
的输出放在传递给 ls -l
的参数的位置,这次 ls -l
的文本位于 file
在正确的地方用它做点什么。这里的问题是注意程序的标准输入和程序的参数之间的区别。例如,标准输入就是您在 C 中调用 scanf
时所拥有的;参数是您在作为参数传递给主过程的 argv
指针中得到的。