在bash中,調用foo
將在stdout上顯示該命令的全部輸出。 html
調用foo > output
會將該命令的全部輸出重定向到指定的文件(在本例中爲「 output」)。 node
有沒有一種方法能夠將輸出重定向到文件並在stdout上顯示? bash
您能夠主要使用Zoredache 解決方案 ,可是若是您不想覆蓋輸出文件,則應使用-a選項編寫tee,以下所示: app
ls -lR / | tee -a output.file
對我有用的另外一種方法是 spa
<command> |& tee <outputFile>
如gnu bash手冊中所示 日誌
例: code
ls |& tee files.txt
若是使用'|&',則command1的標準錯誤 (除了其標準輸出 )還經過管道鏈接到command2的標準輸入; 它是2>&1 |的簡寫 。 將標準錯誤隱式重定向到標準輸出是在命令指定的任何重定向以後執行的。 htm
有關更多信息,請參考重定向 ip
補充一下... get
軟件包解緩衝在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」究竟會不會工做,若是你要運行回聲爲「some_user」,並與輸出重定向>>「SOME_FILE」,由於文件重定向會發生和你同樣
提示:tee還支持帶有-a標誌的append,若是您須要以其餘用戶的身份替換文件中的一行,則能夠以所需用戶的身份執行sed。
您想要的命令名爲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