我知道您可以通过管道将一个命令的输出传递给另一个命令-例如
ls -la | less
查看less
内部的ls -la
输出,而不是终端stdio。
但是,如果使用带参数的command
将输出保存到文件中
command --save-to-file file.txt
那么如何将其传递给另一个命令呢?
这种方式不会起作用:
command --save-to-file | less
因为命令会抱怨你使用了没有任何参数的--save-to-file
(文件名)
如果我没记错的话,在ram中有一个缓冲区或临时文件,你可以把它放在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
也许是因为管道/重定向设计为保存到文件的输出不是二进制安全的,因此当管道/重定向时,这样的输出可能被破坏--可以吗?
发布于 2019-06-11 02:56:41
有些程序对-
有特殊的处理。例如,您可以告诉tar
写入标准输出,以便可以在管道中使用它。这将在本地创建一个tarball,并远程解压它,而不会将tarball写入磁盘:
tar -cf - *.txt | ssh user@host tar -C /dir/ -xf -
您可以在几乎所有程序中使用/dev/stdout
,只要它们不需要可查找的文件。
command --save-to-file /dev/stdout
发布于 2019-06-11 02:58:51
正如@Benjamin W.在评论中指出的那样,你可以将它保存到/dev/stdout
,这是输出,然后通过管道将输出传递给你想要的任何东西(例如less)
command --save-to-file /dev/stdout | less
要小心,因为stdout可能会有额外的输出。在这种情况下,您可以将其丢弃,将其保存到stderr
并重定向到stdout
命令--save-to-file /dev/stderr >/dev/null 2>/dev/stdout | less
如果同时使用stderr
和stdout
,您可以编写自己驱动程序来操纵/proc/pid/mem
或类似的操作。
https://stackoverflow.com/questions/56531660
复制相似问题