在汇总文件描述符时,n<& - 和n>& - 之间的区别是什么?

时间:2016-09-11 13:48:12

标签: shell aggregate stdout file-descriptor

如果你看一下this documentation,你会看到在第19.0章末尾它说:

n<& - =关闭文件描述符n(默认情况下 - > 0 - > stdin)。

n>& - =关闭exit n的文件描述符。

我没有区分这两者.. 关闭文件描述符不应该对它是stdout的退出FD这一事实敏感。

如果你能澄清这一点,那将对我有所帮助。 需要很多帮助,而不是提前。

1 个答案:

答案 0 :(得分:0)

这些之间的主要区别在于,如果未指定文件描述符编号,>&-将关闭stdout,而<&-将关闭stdin。在给定的用例中,文件描述符由数字指定,因此它们实际上在目前可用和广泛使用的shell中完全相同。

但是,如果给定的文件描述符未打开输入,则可以读取标准以要求n<&-抛出错误,或者如果给定的文件描述符编号不是n>&-则抛出错误打开输出:&#34;如果单词中的数字不表示打开(输入|输出)的文件描述符,将导致重定向错误&#34; 。因此,即使当前广泛使用的shell实际上没有实现这种强制执行,但在执行强制执行的情况下编写代码可能是明智的。

请参阅the relevant POSIX specification,重点如下:

  

2.7.5复制输入文件描述符

     

重定向运算符:

[n]<&word
     

应从另一个输入文件描述符复制,或者关闭一个。如果word评估为一个或多个数字,则由n表示的文件描述符或未指定n的标准输入,应使其成为由word表示的文件描述符的副本; 如果单词中的数字不表示已经打开输入的文件描述符,则会产生重定向错误;见Consequences of Shell Errors如果单词评估为&#39; - &#39;,文件描述符n或标准输入,如果未指定n ,则应关闭。< / strong>尝试关闭未打开的文件描述符不应构成错误。如果word评估为其他内容,则行为未指定。

     

2.7.6复制输出文件描述符

     

重定向运算符:

[n]>&word
     

应从另一个复制一个输出文件描述符,或者关闭一个。如果word评估为一个或多个数字,则由n表示的文件描述符或如果未指定n的标准输出,则应使其成为由word表示的文件描述符的副本; 如果单词中的数字不表示已经打开输出的文件描述符,则会产生重定向错误;见Consequences of Shell Errors如果单词评估为&#39; - &#39;,文件描述符n或标准输出,如果未指定n,则将关闭。尝试关闭未打开的文件描述符不应构成错误。如果word评估为其他内容,则行为未指定。