有没有办法将stdin/out而不是文件提供给unix中的程序?

Eli*_*Eli 6 unix bash

我有一个来自第三方的命令行实用程序(它很大,用Java编写),我一直用它来帮助我处理一些数据.此实用程序需要行分隔文件中的信息,然后将处理后的数据输出到STDOUT.

在我的测试阶段,我写了一些Perl来创建一个充满要处理的信息的文件,然后将该文件发送到第三方实用程序,但是因为我接近将这些代码投入生产,我真的更喜欢直接将数据传输到此实用程序而不是首先将该数据写入文件,因为这将节省我不得不将不需要的信息写入磁盘的开销.在unix中有没有办法做到这一点?

目前我调用该实用程序如下:

bin/someapp do-action --option1 some_value --input some_file

我想做点什么:

bin/someapp do-action --option1 some_value --input $piped_in_data

没有我修改第三方应用程序,这样的事情是否可能?

Cam*_*ner 10

你可以在bash中使用"进程替换"来实现你想要的东西.

bin/someapp do-action --option1 some_value --input <(generate_input.sh)
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩.这<(list)部分是流程替代.


Gor*_*son 10

你应该能够使用/ dev/stdin:

bin/someapp do-action --option1 some_value --input /dev/stdin
Run Code Online (Sandbox Code Playgroud)

(注意,在某些系统上,/ dev/stdin是一个符号链接;如果你的Java程序没有处理它,你可能不得不使用/ dev/fd/0或类似的东西.)