首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何通过管道传输需要文件参数的命令的输出

如何通过管道传输需要文件参数的命令的输出
EN

Stack Overflow用户
提问于 2019-06-11 02:24:24
回答 2查看 3.2K关注 0票数 6

我知道您可以通过管道将一个命令的输出传递给另一个命令-例如

代码语言:javascript
复制
ls -la | less

查看less内部的ls -la输出,而不是终端stdio。

但是,如果使用带参数的command将输出保存到文件中

代码语言:javascript
复制
command --save-to-file file.txt

那么如何将其传递给另一个命令呢?

这种方式不会起作用:

代码语言:javascript
复制
command --save-to-file | less

因为命令会抱怨你使用了没有任何参数的--save-to-file (文件名)

如果我没记错的话,在ram中有一个缓冲区或临时文件,你可以把它放在file.txt中,这样你就可以这样做了:

代码语言:javascript
复制
command --save-to-file ram-buffer.txt && cat ram-buffer.txt

甚至没有在磁盘上创建一个文件,对吗?

我为什么需要这个?

一些命令只有一个基本的输出到stdio,更有用的输出类型不能打印,只能保存到文件中。问题是,我根本没有兴趣将更有用的输出类型保存到任何文件中,而只是在终端或管道中将其打印到执行过滤等操作的另一个命令链中,然后最终打印处理后的输出。

我不想负责创建一个临时文件,然后删除它等。完美地,我想只是使用一种神奇的文件(或重定向)来代替file.txt,我可以管道到另一个命令。

对于我来说,如果可能的话,不要将输出的任何内容写入磁盘是很重要的。只需在终端或管道中将其打印到其他命令即可。

此时,我正在尝试捕获PHPUnit的输出

代码语言:javascript
复制
phpunit --log-junit log.xml

它不是一个shell命令,而是一个PHP脚本,它使用:

代码语言:javascript
复制
#!/usr/bin/env php

但是我记得我曾经有一个linux命令的例子,我想要得到输出,但是它的形式只能用一个参数--save-to-file outputfile.txt

也许是因为管道/重定向设计为保存到文件的输出不是二进制安全的,因此当管道/重定向时,这样的输出可能被破坏--可以吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-11 02:56:41

有些程序对-有特殊的处理。例如,您可以告诉tar写入标准输出,以便可以在管道中使用它。这将在本地创建一个tarball,并远程解压它,而不会将tarball写入磁盘:

代码语言:javascript
复制
tar -cf - *.txt | ssh user@host tar -C /dir/ -xf -

您可以在几乎所有程序中使用/dev/stdout,只要它们不需要可查找的文件。

代码语言:javascript
复制
command --save-to-file /dev/stdout
票数 3
EN

Stack Overflow用户

发布于 2019-06-11 02:58:51

正如@Benjamin W.在评论中指出的那样,你可以将它保存到/dev/stdout,这是输出,然后通过管道将输出传递给你想要的任何东西(例如less)

代码语言:javascript
复制
command --save-to-file /dev/stdout | less

要小心,因为stdout可能会有额外的输出。在这种情况下,您可以将其丢弃,将其保存到stderr并重定向到stdout

命令--save-to-file /dev/stderr >/dev/null 2>/dev/stdout | less

如果同时使用stderrstdout,您可以编写自己驱动程序来操纵/proc/pid/mem或类似的操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56531660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档