如何防止bash在进行多个进程替换时返回相同的路径?

时间:2018-01-22 09:36:30

标签: bash process-substitution

我想使用进程替换将一些字符串作为文件传递:

arg() {
    if true; then
        echo <(echo file)
    else
        echo inline
    fi
}

config() {
    echo config content
}

echo -arg $(arg) -config <(config)

-arg可以接受文件路径或内联值。所以我为它创建了一个函数。

但问题是这个脚本输出

-arg /dev/fd/63 -config /dev/fd/63

哪个错了,因为这两个标志会收到相同的内容。

是因为arg是在新shell中运行的吗?

我想知道如何告诉bash不要为多个进程替换使用相同的路径?

我正在使用bash 4.4.12

1 个答案:

答案 0 :(得分:0)

问题是必须在同一命令中使用<( .. )的返回值。文件描述符在命令上下文之外不再有效。

arg函数中,文件描述符63打开以读取echo file命令的输出,但它不被读取,并且在之后不再有效。