2011-04-15 86 views
3

我有我通过重定向输入到一个命令行程序,以及管道到一个文件:包含重定向stdin的程序的控制台输出?

./program <some_input_file> some_output_file 

这显然写入输出不包括重定向输入。是否有一些简单的方法来获取程序的日志,包括我已经传入的重定向输入?

我打算使用外部程序或脚本 - 我在bash/linux上运行这个。

[编辑]

我正在寻找一种方式来获得输出交错 - 因为如果程序是在终端上运行,以输入手动

+0

你总是可以'cat input>输出; ./program < input >> output'但这是你想要的吗? – pajton 2011-04-15 00:21:03

+1

查看我的以下串行和并行组合的响应 – Wes 2011-04-15 17:44:30

回答

1

输入文件下面是一个例如,你可以怎么做:

> cat input.txt 
asdf 
qwer 
zxcv 
> tee output.txt < input.txt | cat >> output.txt 
> cat output.txt 
asdf 
qwer 
zxcv 
asdf 
qwer 
zxcv 

只需更换上述cat与你的计划,你应该是不错的。现在如果你想那么交错,你必须做不同的事情:

> while read line 
    do 
     echo $line >> output.txt 
     echo $line | cat >> output.txt 
    done < 'input.txt' 
> cat output.txt 
asdf 
asdf 
qwer 
qwer 
zxcv 
zxcv 

再次与你的shell脚本替换cat

+0

您还需要确保在每次写入时(或者至少每次从stdin读取),程序'cat'也会刷新其输出缓冲区。 – 2011-04-15 18:27:13

+0

在我们进入循环的下一次迭代之前,这不需要程序cat完成吗?换句话说,这将为我的输入文件中的每行运行一次cat? – thekidder 2011-04-15 19:09:48

+0

@andy @thekidder在这里结合了一些东西。我不知道什么节目在这里。这是一个黑盒子,但是我提供的例子显示了如何以串行和并行方式产生所需的输出。如果你想要更高效的东西,那么我会考虑在你的程序中使用线程来解决这个问题,而不是仅仅依靠shell提供的工具。 – Wes 2011-04-15 20:39:33

1

如果您的程序在读取其下一个输入之前打印某种提示,则可以使用expect与它进行交互。您的expect脚本可以在读取每条输入行时将其打印出来,并在看到提示后将其发送给程序。这样可以为您提供正确的交错输出,而无需每行运行一次您的程序。

相关问题