zsh:我需要关闭文件描述符吗?

时间:2020-07-17 09:32:25

标签: zsh file-descriptor io-redirection

我使用以下代码将某些内容输出到stdout并将其通过管道传递到程序中:

function example() {
    local fd1
    {
        exec {fd1}>&1
        { echo hi >&$fd1 } | true
    } always { exec {fd1}>&- }
}

我想知道我是否可以安全地放下always { exec {fd1}>&- }。无论如何,fd1会超出范围。

1 个答案:

答案 0 :(得分:1)

您需要保留always { exec {fd1}>&- }。如果您摆脱了该限制,则包含文件描述符的变量将超出范围,但文件描述符不会被关闭,从而导致泄漏。您可以通过在没有该行的情况下运行函数之前和之后执行ls -l /proc/$$/fd来查看此内容。每次运行该功能都会在该列表中永久添加另一个FD。最终,您将用完文件描述符,并且将无法打开任何新的描述符,这会弄乱事情。