如何將輸出重定向到文件和標準輸出

在bash中,調用foo將在stdout上顯示該命令的全部輸出。 html

調用foo > output會將該命令的全部輸出重定向到指定的文件(在本例中爲「 output」)。 node

有沒有一種方法能夠將輸出重定向到文件在stdout上顯示? bash


#1樓

您能夠主要使用Zoredache 解決方案 ,可是若是您不想覆蓋輸出文件,則應使用-a選項編寫tee,以下所示: app

ls -lR / | tee -a output.file

#2樓

對我有用的另外一種方法是 spa

<command> |& tee  <outputFile>

gnu bash手冊中所示 日誌

例: code

ls |& tee files.txt

若是使用'|&',則command1的標準錯誤 (除了其標準輸出 )還經過管道鏈接到command2的標準輸入; 它是2>&1 |的簡寫 將標準錯誤隱式重定向到標準輸出是在命令指定的任何重定向以後執行的。 htm

有關更多信息,請參考重定向 ip


#3樓

補充一下... get

軟件包解緩衝在fedora和redhat UNIX發行版中對某些軟件包有支持問題。

排除煩惱

如下對我有用

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

謝謝ScDF馬修,您的輸入爲我節省了不少時間。


#4樓

獎勵答案,由於此用例將我帶到了這裏:

若是您須要以其餘用戶身份執行此操做

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

請注意,回聲會發生在你和文件寫入會發生的「some_user」究竟會不會工做,若是你要運行回聲爲「some_user」,並與輸出重定向>>「SOME_FILE」,由於文件重定向會發生和你同樣

提示:tee還支持帶有-a標誌的append,若是您須要以其餘用戶的身份替換文件中的一行,則能夠以所需用戶的身份執行sed。


#5樓

您想要的命令名爲tee

foo | tee output.file

例如,若是您只關心標準輸出:

ls -a | tee output.file

若是要包括stderr,請執行如下操做:

program [arguments...] 2>&1 | tee outfile

2>&1將通道2(stderr /標準錯誤)重定向到通道1(stdout /標準輸出),以便將二者都寫爲stdout。 從tee命令開始,它也被定向到給定的輸出文件。

此外,若是要追加到日誌文件,請使用tee -a做爲:

program [arguments...] 2>&1 | tee -a outfile
相關文章
相關標籤/搜索