我有我通过重定向输入到一个命令行程序,以及管道到一个文件:包含重定向stdin的程序的控制台输出?
./program <some_input_file> some_output_file
这显然写入输出不包括重定向输入。是否有一些简单的方法来获取程序的日志,包括我已经传入的重定向输入?
我打算使用外部程序或脚本 - 我在bash/linux上运行这个。
[编辑]
我正在寻找一种方式来获得输出交错 - 因为如果程序是在终端上运行,以输入手动
我有我通过重定向输入到一个命令行程序,以及管道到一个文件:包含重定向stdin的程序的控制台输出?
./program <some_input_file> some_output_file
这显然写入输出不包括重定向输入。是否有一些简单的方法来获取程序的日志,包括我已经传入的重定向输入?
我打算使用外部程序或脚本 - 我在bash/linux上运行这个。
[编辑]
我正在寻找一种方式来获得输出交错 - 因为如果程序是在终端上运行,以输入手动
输入文件下面是一个例如,你可以怎么做:
> 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
。
您还需要确保在每次写入时(或者至少每次从stdin读取),程序'cat'也会刷新其输出缓冲区。 – 2011-04-15 18:27:13
在我们进入循环的下一次迭代之前,这不需要程序cat完成吗?换句话说,这将为我的输入文件中的每行运行一次cat? – thekidder 2011-04-15 19:09:48
@andy @thekidder在这里结合了一些东西。我不知道什么节目在这里。这是一个黑盒子,但是我提供的例子显示了如何以串行和并行方式产生所需的输出。如果你想要更高效的东西,那么我会考虑在你的程序中使用线程来解决这个问题,而不是仅仅依靠shell提供的工具。 – Wes 2011-04-15 20:39:33
如果您的程序在读取其下一个输入之前打印某种提示,则可以使用expect
与它进行交互。您的expect
脚本可以在读取每条输入行时将其打印出来,并在看到提示后将其发送给程序。这样可以为您提供正确的交错输出,而无需每行运行一次您的程序。
你总是可以'cat input>输出; ./program < input >> output'但这是你想要的吗? – pajton 2011-04-15 00:21:03
查看我的以下串行和并行组合的响应 – Wes 2011-04-15 17:44:30