我有一个命令可以产生一些输出部分,它实际上是一个包含完整输出数据的文件名。我想提取文件名(我用它很简单cut
),然后将它传递给另一个程序,例如cat
它将显示该文件的内容。
我无法分享我正在运行的实际命令,但为了可重复性,您可以替换./my-command args
为echo 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 不可知方法是非常可取的。