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>&-
在我们检查$?
答案 0 :(得分:4)
您正在关闭文件描述符,因此程序在尝试写入它们时会收到错误,并且会向您传达该错误。
如果将输出重定向到/dev/null
,则写入成功,ls
不知道输出被丢弃。