gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 19:26:06 26 4
gpt4 key购买 nike

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

ls -la | less

查看 ls -la 的输出内部 less而不是终端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 输出,更有用的输出类型不能被它们打印,而只能保存到文件中。问题是我根本不想将更有用的输出类型保存到任何文件中,而只是在终端或管道中将其打印到另一个执行过滤等的命令链,然后最终打印处理后的输出。

我不想负责创建一个 tmp 文件然后删除它等等。完美的我只想使用一种魔法文件(或重定向)来代替 file.txt我可以通过管道传输到另一个命令。

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

此时我正在 try catch PHPUnit 的输出
phpunit --log-junit log.xml

这不是一个 shell 命令,而是一个 PHP 脚本,它使用:
#!/usr/bin/env php

但我记得我曾经有一个使用 linux 命令的示例,我想获取输出,但它的形式只能通过参数 --save-to-file outputfile.txt 获得。

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

最佳答案

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

tar -cf - *.txt | ssh user@host tar -C /dir/ -xf -

您可以使用 /dev/stdout几乎所有程序,只要它们不需要可查找的文件。
command --save-to-file /dev/stdout

关于shell - 如何通过管道输出需要文件参数的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56531660/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com