将输出从文件重定向到stdout

Mar*_*ark 4 unix bash shell stdout

我有一个程序可以将结果只输出到文件,并带有-o选项.这次我需要将它输出到控制台,即stdout.这是我的第一次尝试:

myprog -o /dev/stdout input_file
Run Code Online (Sandbox Code Playgroud)

但它说:

/ dev/not writable

我发现这个问题与我的相似,但/dev/stdout如果没有额外的魔法,显然不会有效.

问:如何将文件中的输出重定向到stdout

PS没有任何专用软件的传统方法是优选的.

cda*_*rke 5

如果程序只能写入文件,则可以使用命名管道:

pipename=/tmp/mypipe.$$
mkfifo "$pipename"

./myprog -o "$pipename" &

while read line
do
    echo "output from myprog: $line"
done < "$pipename"

rm "$pipename"
Run Code Online (Sandbox Code Playgroud)

首先我们创建管道,我们将它放入其中/tmp以使其不受备份程序的影响。这$$是我们的 PID,并使名称在运行时唯一。

我们在后台运行程序,它应该阻止尝试写入管道。一些程序使用一种称为“内存映射”的技术,在这种情况下这将失败,因为管道不能被内存映射(一个好的程序会检查这一点)。

然后我们像读取任何其他文件一样读取脚本中的管道。

最后我们删除管道。


Ram*_*mon 5

许多工具-根据其使用的上下文将st 解释为stdin/stdout.虽然,这不是shell的一部分,因此取决于所使用的程序.

在您的情况下,以下可以解决您的问题:

myprog -o - input_file
Run Code Online (Sandbox Code Playgroud)