我发现我想观察(并等待)命令生成的进程这个答案这似乎正是我所需要的。除了我希望脚本是独立的,所以我可以使用进程重定向来动态创建它,而不是获取文件吗?例如;
#!/usr/bin/env bash
tasklist="(
command1
if abc; then
command2
elif
command3
fi
command4
)"
source < <(echo "$tasklist") ; wait
我用cat
和 后来用它测试了它bash
并且它有效:
#!/usr/bin/env bash
tasklist="(
echo "command1"
echo "command2"
echo "command3"
)"
bash < <(echo "$tasklist")
source
但我无法让自己这么做。我之前有过一些不好的经历。 :/
谢谢。
答案1
无论如何,它在 Bash 4.4 及更高版本中有效,它会打印hi
和hello
:
cmds='echo hi; var=hello'
source <(echo "$cmds")
echo $var
您需要source <(...)
,而不是source < <(...)
采用source
进程替换已经提供的文件名。无需重定向。
不过,如果您将这些命令放在变量中,则可以直接运行 eval "$cmds"
。或者,如果命令是固定的,则直接运行它们,而不用担心中间变量,即
echo hi; var=hello
echo $var
不管怎样,我不太确定你wait
在那里想做什么。wait
等待后台作业,但那里没有任何作业。所有这些常规命令都在未&
在前台运行的情况下启动,并且 shell 无论如何都会在读取任何新命令之前等待它们。