我已阅读(例如:How do file descriptors work?)要使用文件描述符3-9,我需要先打开它们。尝试在没有它的情况下使用它们会产生错误:
function f()
{
echo hi 1>&3
}
f
输出:
bash: 3: Bad file descriptor
但是,如果我在调用函数时重定向它,一切似乎都可以正常工作
f 3>&1
输出:
hi
那么我是否需要打开文件描述符?
答案 0 :(得分:1)
是的,您确实需要打开一个新的文件描述符,并且作为一个好习惯,您应该像这样最后关闭它:
f() {
# open fd=3 redirecting to 1 (stdout)
exec 3>&1
# redirect stdout to fd=3
echo hi >&3
# close fd=3
exec 3>&-
}
请注意,在调用函数时运行f 3>&1
时,实际上是通过将文件描述符3
重定向到&1
(stdout)来打开文件描述符。