我有一些腳本,我需要看到的輸出和結果記錄到文件中,用最簡單的例子是:如何在bash中記錄輸出並同時在終端中看到它?
$ update-client > my.log
我希望能夠看到該命令的輸出,而這是運行,但也有它記錄到文件。我也登錄stderr
,所以我希望能夠在看到它的同時記錄錯誤流。
我有一些腳本,我需要看到的輸出和結果記錄到文件中,用最簡單的例子是:如何在bash中記錄輸出並同時在終端中看到它?
$ update-client > my.log
我希望能夠看到該命令的輸出,而這是運行,但也有它記錄到文件。我也登錄stderr
,所以我希望能夠在看到它的同時記錄錯誤流。
update-client 2>&1 | tee my.log
2> & 1標準誤差重定向到標準輸出,和T發送其標準輸入到標準輸出和文件。
只需使用尾部即可在文件更新時觀察文件。背景你在你上面的命令後,加入&執行該命令後,以上只是用
$ tail -f my.log
它會不斷地更新原來的進程。 (注意它不會告訴你什麼時候文件已經完成運行,所以你可以輸出一些東西到日誌中來告訴你它已經完成了,Ctrl-c退出尾部)
哇在這一個艱難的人羣。這個答案究竟有什麼錯誤? – Cfreak 2010-07-09 19:19:52
在我看來,它比使用'tee'差幾千倍。 – 2010-07-09 21:16:55
需要我在後臺運行進程 – 2012-08-19 19:10:44
另一個選擇是使用基於塊的輸出捕捉腳本(不知道這是否是正確的技術術語)。
例
#!/bin/bash
{
echo "I will be sent to screen and file"
ls ~
} 2>&1 | tee -a /tmp/logfile.log
echo "I will be sent to just terminal"
我想有更多的控制和靈活性 - 所以我更喜歡這種方式。
謝謝,這工作完美 – wiak 2015-06-02 19:25:45
可以使用tee命令爲:
command | tee /path/to/logfile
的equivelent沒有寫入殼將是:
command > /path/to/logfile
如果要追加(>>)和顯示輸出在shell中,使用-a選項:
command | tee -a /path/to/logfile
請注意管道只會捕捉stdout,錯誤爲std err沒有被三通管處理。如果你想記錄錯誤(從標準錯誤),用途:
command 2>&1 | tee /path/to/logfile
這意味着:運行命令和重定向stderr流(2)到stdout(1)。這將通過三通應用程序傳遞給管道。
瞭解這個在askubuntu網站
您還可以追加日誌文件,按此處的說明,以及做其他的東西與三通:http://linux.101hacks.com/unix/tee-command-例子/ – thegeek 2010-07-12 08:18:09