当我有
时 exec 3>>file # file descriptor 3 now points to file
[ $dryrun ] && exec 3>&1 # or possibly to stdout
echo "running">&3
exec 3>&- # and is now closed
我担心文件描述符3可能指向有问题的函数之外。我怎么处理这个?
next_available_fd
?答案 0 :(得分:1)
我不知道任何像next_available_fd
这样简单的事情,但是为了获得你想要的功能(临时重定向文件描述符而不影响函数外部)可以在bash中完成如下(我不知道sh):
exec 3>file3
exec 1>file1
echo "something">&3
echo "something else"
f31 () {
echo "something">&3
}
f31 3>&1
f13 () {
echo "something else"
}
f13 >&3
echo "something">&3
echo "something else"
结果file1
:
something else
something
something else
file3
:
something
something else
something
这表明在每种情况下重定向仅限于函数调用。
答案 1 :(得分:1)
而不是使用exec重定向函数中的文件描述符,你可以(使用bash,我没有尝试过其他shell):
foo() { test $dryrun && exec 3>&1 echo running >&3 } 3>>file foo more_commands
在此设置中,“running”将根据$ dryrun转到文件或原始stdout,而more_commands将具有fd 3,就像调用foo之前一样。
答案 2 :(得分:0)
如果您的系统使用/proc
文件系统,请查看/proc/$$/fd
内部以查看正在使用的内容。