我想使用进程替换将一些字符串作为文件传递:
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
答案 0 :(得分:0)
问题是必须在同一命令中使用<(
.. )
的返回值。文件描述符在命令上下文之外不再有效。
在arg
函数中,文件描述符63打开以读取echo file
命令的输出,但它不被读取,并且在之后不再有效。