我希望能够将定界符传递给
source
命令进行本地解释。
Heredoc 文档的正文将在稍后调用脚本之前注入,并且可以是多行的。
我想出了这个技巧,它适用于
zsh
:
source <(<<'heredoc'
echo foo
sleep 10
echo done
heredoc
) && echo ok || echo no
它打印
foo
,休眠 10 秒,然后打印 done
,然后打印 ok
。到目前为止,一切都很好。
现在,脚本需要在
bash
中运行。
当我喂 bash
(或 sh
)完全相同的东西时,我只得到 ok
,根本不需要等待,就好像我向定界文档提供的命令只是 true
。
我不明白为什么,以及如何在
bash
和 sh
中构建相同的行为。
source <(cat <<'heredoc'
echo foo
sleep 10
echo done
heredoc
) && echo ok || echo no
如何让它在bash中工作?
删除此处的所有文档并执行命令。您可以保留该组。
{
echo foo
sleep 10
echo done
} && echo ok || echo no
如果您想在当前执行环境中执行来自 steam 的命令(例如此处的文档),则可以在 zsh 和 bash 中使用
source /dev/stdin
。在任何一种情况下都不需要 <(
流程替换。
为什么
因为在 bash 中,空重定向(例如没有命令的此处文档)不会执行任何操作。例如,您必须将此处文档创建的流的内容输出到标准输出,以便过程变电站捕获它。