我有一个程序只能将结果输出到-o
选项的文件。这次我需要将它输出到控制台,即stdout
。这是我的第一次尝试:
myprog -o /dev/stdout input_file
但它说:
/ dev / not writable
我发现this question与我的相似,但/dev/stdout
显然不会在没有额外魔法的情况下发挥作用。
问:如何将文件中的输出重定向到stdout
?
P.S。没有任何专门软件的传统方法是优选的。
答案 0 :(得分:5)
许多工具将-
解释为stdin / stdout,具体取决于其使用的上下文。但是,这不是shell的一部分,因此取决于所使用的程序。
在您的情况下,以下内容可以解决您的问题:
myprog -o - input_file
答案 1 :(得分:4)
如果程序只能写入文件,那么您可以使用命名管道:
pipename=/tmp/mypipe.$$
mkfifo "$pipename"
./myprog -o "$pipename" &
while read line
do
echo "output from myprog: $line"
done < "$pipename"
rm "$pipename"
首先我们创建管道,我们将它放入/tmp
以防止它不受备份程序的影响。 $$
是我们的PID,并且在运行时使名称唯一。
我们在后台运行程序,它应该阻止尝试写入管道。有些程序使用一种称为“内存映射”的技术,在这种情况下,这将失败,因为管道无法进行内存映射(一个好的程序会检查这个)。
然后我们像在任何其他文件中一样读取脚本中的管道。
最后我们删除了管道。
答案 2 :(得分:2)
您可cat
myprog
撰写的文件内容。
myprog -o tmpfile input_file && cat tmpfile
这将产生描述的效果 - 允许您将myprog
的输出传递给某个后续命令 - 尽管它与您设想的方法不同。
在myprog
(可能更恰当notmyprog
)的输出太大而无法写入磁盘的情况下,这种方法不会很好。
在同一行清理临时文件但仍在最后输出内容的解决方案将是
myprog -o tmpfile input_file && contents=`cat tmpfile` && rm tmpfile && echo "$contents"
将文件内容存储在变量中,以便在删除文件后访问该文件。请注意echo
命令参数中的引号。这些对于保留文件内容中的换行很重要。