关闭stdout和stderr(1>& - 2>&amp ;-)修改退出状态?

时间:2014-05-09 08:54:48

标签: linux bash

ls -l /path/to/dir/*.extension 1>&- 2>&-

确实将退出状态设为2,即使存在.extension的文件或我是否犯了错误?

我所做的事情1>&- 2>&-我正在关闭stdout和stderr for command,它不应该对命令的退出状态做任何事情!

但是正如人们所期望的那样总是很好用:

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

退出状态为0,符合预期。

只是寻找这种行为的解释。

#UNDERSTANDING

根据Simon Richter的回答: 如果我们做类似

的事情
jordan-a@hosties:exp$ echo "Life" 1>&- 
-bash: echo: write error: Bad file descriptor 
由于echo无法写入stdout和,因此它会抛出错误 如果我们这样做

jordan-a@hosties:exp$ echo "Life" 1>&- 2>&-

在我们检查$?

之前,我们甚至都不知道错误

1 个答案:

答案 0 :(得分:4)

您正在关闭文件描述符,因此程序在尝试写入它们时会收到错误,并且会向您传达该错误。

如果将输出重定向到/dev/null,则写入成功,ls不知道输出被丢弃。