0

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

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在新外壳中运行吗?

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

我正在使用 bash 4.4.12

4

1 回答 1

0

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

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

于 2018-01-22T09:50:10.187 回答