Shell

標準輸入、標準錯誤、重定向和日誌

  • June 22, 2018

這兩條線有區別嗎?

/home/user/script.sh >> /home/user/stdout_and_error.log  2>&1
/home/user/script.sh 2>&1 >> /home/user/stdout_and_error.log  

知道我想將腳本的標準輸出和執行錯誤放在日誌文件中。如果沒有差​​異,如果我想記錄日誌記錄本身怎麼辦?

是,有一點不同。

/home/user/script.sh >> /home/user/stdout_and_error.log  2>&1

這會將 STDOUT 和 STDERR 發送到/home/user/stdout_and_error.log.

/home/user/script.sh 2>&1 >> /home/user/stdout_and_error.log  

這會將 STDOUT 發送到/home/user/stdout_and_error.log,並將 STDERR 發送到以前的 STDOUT。

 

當您執行 shell 重定向時,重定向的左側將轉到重定向右側目前所在的位置。意思是2>&1,它將 STDERR (2) 發送到 STDOUT (1) 目前所在的任何位置。

但是,如果您之後將 STDOUT 重定向到其他地方,則 STDERR 不會使用它。它繼續前進到 STDOUT 之前去的任何地方。這就是為什麼在你的第一個例子中,STDOUT 和 STDERR 都會去同一個地方,但在第二個例子中它們不會。

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