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没有任何专用软件的传统方法是优选的.
如果程序只能写入文件,则可以使用命名管道:
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,并使名称在运行时唯一。
我们在后台运行程序,它应该阻止尝试写入管道。一些程序使用一种称为“内存映射”的技术,在这种情况下这将失败,因为管道不能被内存映射(一个好的程序会检查这一点)。
然后我们像读取任何其他文件一样读取脚本中的管道。
最后我们删除管道。
许多工具-根据其使用的上下文将st 解释为stdin/stdout.虽然,这不是shell的一部分,因此取决于所使用的程序.
在您的情况下,以下可以解决您的问题:
myprog -o - input_file
Run Code Online (Sandbox Code Playgroud)