2011-04-15 58 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腳本可以在讀取每條輸入行時將其打印出來,並在看到提示後將其發送給程序。這樣可以爲您提供正確的交錯輸出,而無需每行運行一次您的程序。

相關問題