Bash
將輸出列印在螢幕上並重定向到一個文件並將錯誤轉發到另一個文件
我正在嘗試回答這個實驗室問題。有沒有辦法在不使用
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
確保它也被列印並保存到文件中。