我使用以下代码将某些内容输出到stdout并将其通过管道传递到程序中:
function example() {
local fd1
{
exec {fd1}>&1
{ echo hi >&$fd1 } | true
} always { exec {fd1}>&- }
}
我想知道我是否可以安全地放下always { exec {fd1}>&- }
。无论如何,fd1
会超出范围。
答案 0 :(得分:1)
您需要保留always { exec {fd1}>&- }
。如果您摆脱了该限制,则包含文件描述符的变量将超出范围,但文件描述符不会被关闭,从而导致泄漏。您可以通过在没有该行的情况下运行函数之前和之后执行ls -l /proc/$$/fd
来查看此内容。每次运行该功能都会在该列表中永久添加另一个FD。最终,您将用完文件描述符,并且将无法打开任何新的描述符,这会弄乱事情。