2014-05-09 30 views
1

是否ls -l /path/to/dir/*.extension 1>&- 2>&-關閉stdout和stderr(1>& - 2>& - )修改退出狀態?

真的給退出狀態爲2即使存在與.extension文件還是我做一些錯了嗎?

我在做什麼1>&- 2>&-我正在關閉命令的stdout和stderr,它不應該對命令的退出狀態做任何事情!

作爲一個希望以下總是工作很細:

ls -l /path/to/dir/*.extension &>/dev/null 

退出狀態是0預期。

只是尋找這種行爲的解釋。

#UNDERSTANDING

在由西蒙·裏希特給出答案的基礎: 如果我們這樣做

[email protected]:exp$ echo "Life" 1>&- 
-bash: echo: write error: Bad file descriptor 

它拋出錯誤,因爲回聲無法寫入stdout和 如果我們這樣做

[email protected]:exp$ echo "Life" 1>&- 2>&- 

我們甚至不會知道錯誤,直到我們檢查的時間$?

+0

1>/dev/null 2>&1 – MLSC

回答

4

您正在關閉文件描述符,所以程序會在嘗試寫入它們時出錯,並將錯誤傳達給您。

如果將輸出重定向到/dev/null,寫入成功,並且ls不知道輸出被丟棄。