Linux命令:为什么重定向操作符 - | 即管道在这里失败?

pra*_*nav 1 linux bash shell pipe sh

我正在通过Shell(Bash)Scripting的入门读书,并有以下疑问:

  • 为什么以下命令不打印cp's目录的内容:which cp | ls -l

  • 根据定义,管道是否意味着我们将一个命令的输出传递给另一个命令,即重定向输出?

有人可以帮我吗 ?我是新手..

abl*_*igh 5

输出which通过管道传输到标准输入ls.但是,ls标准输入不需要任何操作.你想要它(我推测)作为参数传递.有几种方法可以做到这一点:

which cp | xargs ls -l
Run Code Online (Sandbox Code Playgroud)

要么

ls -l `which cp`
Run Code Online (Sandbox Code Playgroud)

要么

ls -l $(which cp)
Run Code Online (Sandbox Code Playgroud)

在第一个示例中,该xargs命令采用上一个上一个命令的标准输出,并使每一行成为紧跟其名称的命令的参数xargs.所以,例如

find / | xargs ls -l
Run Code Online (Sandbox Code Playgroud)

ls -l在文件系统中的每个文件上执行一个(这有一些问题与特殊命名的文件,但这超出了这个答案的范围).

其余两个大致相当,并使用shell执行此操作,将输出扩展which到命令行中cp.