【问题标题】:closing stdout and stderr (1>&- 2>&-) modifies exit status?关闭 stdout 和 stderr (1>&- 2>&-) 修改退出状态?
【发布时间】:2014-06-26 22:42:04
【问题描述】:

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

即使存在带有.extension 的文件,也确实将退出状态设为2,还是我犯了一些错误?

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

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

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

退出状态如预期的那样是0

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

#理解

根据 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>&-

在我们检查$?之前,我们甚至不会知道错误。

【问题讨论】:

    标签: linux bash


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-08
      • 2013-05-13
      • 1970-01-01
      • 2021-03-08
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多