为什么 2>&1 (将 stderr 重定向到 stdout)与 &- 2>&- (关闭 stdin、stdout、stderr)?

为什么 2>&1 (将 stderr 重定向到 stdout)与 &- 2>&- (关闭 stdin、stdout、stderr)?

为什么有人会这样做

(exec <&- >&- 2>&-; gzip somefile.txt) 2>&1 &

<&- >&- 2>&- "...分别表示关闭 stdin、stdout 和 stderr.."

但如果“2>&1”是封闭的,为什么还要这样做呢?

答案1

提到的说法是不正确的,因为标准文件描述符必须是打开的。

POSIX 规范:C.2.7 重定向

应用程序不应使用[n]<&-[n]>&-运算符来执行文件描述符0未打开以进行读取或文件描述符12打开以进行写入的实用程序或应用程序,因为这可能会导致执行的程序(或内置 shell)行为不当。为了不将这些文件描述符传递给已执行的实用程序或应用程序,应用程序不应只是关闭它们,而应在例如/dev/null.某些实现可能会自动重新打开它们,但应用程序不应依赖于此完成。

该指令宁愿是

gzip somefile.txt >/dev/null 2>&1 &

答案2

没有理由做他们所做的事情。2>&1在这个例子中确实是完全多余的。

相关内容