linux - shell格式 - 如何將輸出重定向到文件和stdout




shell操作符 (6)

在bash中,調用foo會在stdout上顯示該命令的任何輸出。

調用foo > output會將該命令的foo > output重定向到指定的文件(在本例中為'output')。

有沒有辦法將輸出重定向到文件並將其顯示在標準輸出上?


T卹是完美的,但這也將完成這項工作

ls -lr / > output | cat output

< command > |& tee filename #這將創建一個文件“filename”,其命令狀態為內容,如果文件已經存在,它將刪除已存在的內容並寫入命令狀態。

< command > | tee >> filename < command > | tee >> filename #這會將狀態追加到文件中,但不會在standard_output(screen)上打印命令狀態。

我想通過在屏幕上使用“回顯”來打印某些內容,並將該回顯數據附加到文件中

echo "hi there, Have to print this on screen and append to a file" 

使用tail -f output應該可以工作。


另一種適用於我的方法是,

<command> |& tee  <outputFile>

gnu bash手冊所示

例:

ls |& tee files.txt

如果使用'&',則除標準輸出外,command1的標準錯誤通過管道連接到command2的標準輸入; 它是2>&1 |的簡寫 標準錯誤隱式重定向到標準輸出是在命令指定的任何重定向之後執行的。

有關更多信息,請參閱redirection


東西要添加...

軟件包unbuffer在fedora和redhat unix版本下有一些軟件包的支持問題。

拋開麻煩

以下為我工作

bash myscript.sh 2>&1 | tee output.log

謝謝 & 你的輸入為我節省了很多時間..


自此使用案例帶來了以下獎勵回答:

在你需要以其他用戶身份執行此操作的情況下

echo "some output" | sudo -u some_user tee /some/path/some_file

請注意,迴聲將會發生,因為您和文件寫入將以“some_user”的方式發生,如果您將echo作為“some_user”運行,並使用>>“some_file”重定向輸出,因為將發生文件重定向和你一樣。

提示:tee還支持使用-a標誌追加,如果您需要將文件中的某行替換為另一個用戶,則可以執行sed作為所需用戶。





stdout