我的理解是,当使用open()打开一个新文件时,无法控制操作系统分配的文件描述符(整数).那么如何在bash
shell中使用类似的命令来分配特定的文件描述符
exec 5>&1
(我想我可以通过阅读bash来源找到…)
解决方法
我相信你是对的,有时文件描述符可能已经在使用中.我从
http://tldp.org/LDP/abs/html/io-redirection.html#FTN.AEN17716得到了这个
“使用文件描述符5可能会导致问题.当Bash创建子进程时,与exec一样,子进程继承fd 5(请参阅Chet Ramey的归档电子邮件,SUBJECT: RE: File descriptor 5 is held open).最好单独保留这个特定的fd.”
对此的解决方案在bash手册的第3.6节第2节中有详细说明.
Each redirection that may be preceded by a file descriptor number may instead be
preceded by a word of the form{varname}
. In this case,for each redirection operator
except >&- and <&-,the shell will allocate a file descriptor greater than 10 and assign it to {varname}. If >&- or <&- is preceded by {varname},the value of varname defines the file descriptor to close.
例如
#!/bin/bash exec {NEW_STDOUT}>&1 echo "Hello" >&$NEW_STDOUT exec {NEW_STDOUT}>&-
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。