Bash

將輸出列印在螢幕上並重定向到一個文件並將錯誤轉發到另一個文件

  • March 9, 2021

我正在嘗試回答這個實驗室問題。有沒有辦法在不使用tee命令的情況下解決這個問題?

作為 server1 上的 user1,在、和上執行ls命令。將輸出列印在螢幕上並重定向到文件,並將錯誤轉發到文件。執行命令後檢查這兩個文件並分析結果。(提示:輸入、輸出和錯誤重定向)。/etc``/dvd``/var``/tmp/ioutput``/tmp/ioerror

如果我這樣嘗試,輸出不會列印在螢幕上。

[user1@server1 ~]$ ls /etc /dvd /var 1> /tmp/ioutput 2> /tmp/ioerror

如果我使用tee命令,錯誤文件是空的。

ls /etc /dvd /var | tee /tmp/ioutput 2> /tmp/ioerror

有沒有辦法僅通過使用重定向運算符來解決它?

只需使用tee. 但是要得到標準錯誤輸出,需要重定向原程序的標準錯誤。管道 ( |) 僅將標準輸出傳遞給tee,這就是錯誤文件為空的原因。你想要的是:

ls /etc /dvd /var 2> /tmp/ioerror | tee /tmp/ioutput 

如果你想在螢幕上同時看到 stderr 和 stdout,試試這個:

ls /etc /dvd /var 2> >(tee /tmp/ioerror) | tee /tmp/ioutput 

這將首先將 stderr 重定向到tee /tmp/ioerror,這意味著您將在螢幕上看到它並將其保存在文件中,然後通過管道傳輸 stdout 以tee /tmp/ioutput 確保它也被列印並保存到文件中。

引用自:https://unix.stackexchange.com/questions/638340