Jim*_*mix 6 shell file pipe command-line-interface io-redirection
我知道您可以将一个命令的输出通过管道传输到另一个命令 - 例如
ls -la | less
Run Code Online (Sandbox Code Playgroud)
查看ls -la内部less而不是终端stdio的输出。
但是,如果您使用command带有将输出保存到文件的参数
command --save-to-file file.txt
Run Code Online (Sandbox Code Playgroud)
那么如何通过管道将其传递给另一个命令?
这种方式行不通:
command --save-to-file | less
Run Code Online (Sandbox Code Playgroud)
因为命令会抱怨你使用--save-to-file没有任何参数(文件名)
如果我记得很清楚,在 ram 中有一个缓冲区或临时文件之类的东西,您可以将其放入而不是file.txt这样您可以执行以下操作:
command --save-to-file ram-buffer.txt && cat ram-buffer.txt
Run Code Online (Sandbox Code Playgroud)
甚至无需在磁盘上创建文件,对吗?
为什么我需要那个?
一些命令只有一个基本的输出到 stdio 并且更有用的输出类型不能被它们打印而只能保存到文件中。问题是我根本不想将更有用的输出类型保存到任何文件,而只是在终端或管道中将其打印到另一个执行过滤等的命令链,然后最终打印处理后的输出。
我不想负责创建一个 tmp 文件然后删除它等等。完美地我只想使用一种魔法文件(或重定向)来代替file.txt我可以通过管道传输到另一个命令的文件。
如果可能的话,不要将输出的任何内容写入磁盘,这对我来说很重要。只需在终端或管道中将其打印到其他命令即可。
此时我正在尝试捕获 PHPUnit 的输出
phpunit --log-junit log.xml
Run Code Online (Sandbox Code Playgroud)
这不是一个 shell 命令,而是一个 PHP 脚本,它使用:
#!/usr/bin/env php
Run Code Online (Sandbox Code Playgroud)
但是我记得我曾经有一个带有 linux 命令的示例,我想获取输出但它的形式只能通过参数获得 --save-to-file outputfile.txt
也许是因为管道/重定向设计为保存到文件的输出不是二进制安全的,因此在管道/重定向时这样的输出可能会损坏 - 可以吗?
有些程序对-. 例如,您可以告诉tar写入标准输出,以便可以在管道中使用它。这将在本地创建一个 tarball 并远程解压它,而无需将 tarball 写入磁盘:
tar -cf - *.txt | ssh user@host tar -C /dir/ -xf -
Run Code Online (Sandbox Code Playgroud)
您可以/dev/stdout与几乎所有程序一起使用,只要它们不需要可查找文件即可。
command --save-to-file /dev/stdout
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3079 次 |
| 最近记录: |