我知道你可以将一个命令的输出导入到另一个命令中,例如
ls -la | less
将ls -la
的输出结果在less
中查看,而不是在终端stdio中。
但如果您使用一个带有参数的命令
来将输出保存到文件中。
command --save-to-file file.txt
那么如何将其导向另一个命令呢? 这种方式行不通:
command --save-to-file | less
因为命令会抱怨你使用了
--save-to-file
却没有任何参数(文件名)。如果我没记错,有一个缓冲区或者临时文件可以代替 file.txt
,这样你就可以做到以下操作:command --save-to-file ram-buffer.txt && cat ram-buffer.txt
不需要在硬盘上创建文件,是这样吗?
为什么我需要这个?
有些命令只能将基础输出打印到stdio中,而更有用的类型的输出不能被打印,只能保存到文件中。问题是我根本不感兴趣将更有用的输出保存到任何文件中,而只是想要将其打印在终端上或者管道传递给其他过滤器命令等进行处理,最后再打印出处理后的输出。
我不想负责创建一个临时文件,然后再删除它等操作。完美的话,我希望只使用一种魔法文件(或重定向),来代替file.txt
,以便我可以将其传递给另一个命令。
对我来说很重要的一点是,如果可能的话,请不要将任何输出内容写入磁盘,只需将其打印在终端上或者管道传递给其他命令。
目前,我正在尝试捕获PHPUnit的输出。
phpunit --log-junit log.xml
这不是一个shell命令,而是一个使用以下内容的PHP脚本:
#!/usr/bin/env php
但我记得我曾经有一个Linux命令的例子,我想获取输出,但它只能通过参数--save-to-file outputfile.txt
以特定形式获得。
可能是因为将本来设计用于保存到文件的输出进行管道化/重定向不是二进制安全的,因此此类输出在进行管道化/重定向时可能会损坏 - 是这样吗?
cmd -f output.txt
这样吗,还是像cmd --save-to-file
这样没有参数? - Benjamin W.cmd --save-to-file output.txt
我已经在问题的编辑中提供了更多信息。 - Jimmix/dev/stdout
而不是output.txt
。 - Benjamin W.