我有我通過重定向輸入到一個命令行程序,以及管道到一個文件:包含重定向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