我可以使用管道将程序的输出重定向到 cat 吗?

use*_*828 1 pipe io-redirection cat subshell

我有一个包含三个文件和基本内容的文件夹:

$ tail *
==> file1 <==
file 1 contents

==> file2 <==
file 2 contents

==> file3 <==
file 3 contents
Run Code Online (Sandbox Code Playgroud)

我想使用cat. 我尝试像这样使用它:

$ ls -ctr | tail -1
file3

$ ls -ctr | tail -1 | cat
file3
Run Code Online (Sandbox Code Playgroud)

但正如您所看到的,它只打印最后一个文件的名称。我认为管道会获取输出tail并处理具有该名称的文件,就像使用 subshel​​l 命令一样:

$ cat $(ls -ctr | tail -1)
file 3 contents
Run Code Online (Sandbox Code Playgroud)

为什么重定向方法不起作用,有没有办法用管道而不是子外壳来实现这一点?

Joh*_*ohn 6

您要使用以下xargs命令:

$ ls -ctr | tail -1 | xargs cat
Run Code Online (Sandbox Code Playgroud)

这将采用tail -1命令的 STDOUT ,而不是将其用作cat命令的STDIN,而是将其用作命令的选项cat