在标准输入上打印给定文件名的文件内容的命令

Rob*_*obV 5 xargs cat stdin

我有一个命令可以产生一些输出部分,它实际上是一个包含完整输出数据的文件名。我想提取文件名(我用它很简单cut),然后将它传递给另一个程序,例如cat它将显示该文件的内容。

我无法分享我正在运行的实际命令,但为了可重复性,您可以替换./my-command argsecho 1:2:3:4:file.txt

所以我尝试了以下方法:

./my-command args | cut -d : -f 5 | cat
Run Code Online (Sandbox Code Playgroud)

然而,这只是打印文件名,因为cat在没有任何参数的情况下调用 stdin 时,它只是将 stdin(包含我的文件名)的内容复制到 stdout。

现在我知道我可以通过反转命令流并基本上通过cat子外壳传递参数来解决这个问题,例如 Bash

cat `./my-command args | cut -d : -f 5`
Run Code Online (Sandbox Code Playgroud)

这将打印文件的内容,但是这不是特别友好,因为我不能通过将一个简单的命令附加到我的调用来简单地通过管道传输我的底层命令的输出。

是否有cat类似的程序可以接收标准输入上的文件名并打印其内容?或者有没有办法cat将标准输入视为参数?

笔记

我意识到我可以定义一个 bash 函数,它可以从 stdin 读取文件名并cat在我自己的环境中调用它们。然而,这种直接转储输出数据的技术需要包含在最终用户文档中,并且一种简单的 shell 不可知方法是非常可取的。

Rob*_*obV 7

在做了更多的研究之后,我意识到这个场景正是xargs为以下目的而设计的:

./my-command args | cut -d : -f 5 | xargs cat
Run Code Online (Sandbox Code Playgroud)

这会将 stdin 的输出转换为cat具有实际文件名的调用,从而打印出文件内容