我正在尝试使用子进程将多个输出传递给命令。这是我的命令(的缩写版本):
cat "$1"
one=cat "$1"
的输出command <(echo "foo")
是
foo
/dev/fd/63: Permission denied
由于cat "$1"
有效,我假设该函数有权读取子流程的输出,但当我尝试将其放入变量时,权限被拒绝。为什么会这样,有什么办法可以解决吗?
答案1
你的问题并不完全清楚。但我猜你有一个名为的命令x
,它的作用如下:
cat "$1"
one=$(cat "$1")
现在,当你这样做时,x <(echo "foo")
你会得到一个错误。
这是因为<(...)
结构的工作原理。
基本上它运行echo foo
并将其输出连接到临时文件句柄(/dev/fd/63
),然后将其作为参数传递。
所以现在你的第一个cat
命令读取整个输入。这意味着没有剩余的输入。所以你的第二 cat
命令没有任何可读取的内容。您会收到错误,因为该echo
过程已完成并且没有打开的句柄可供读取。
以简单的形式,您已经完成了一个特殊版本
echo "foo" | {
cat
one=$(cat)
}
但具有巧妙的文件处理魔法。