我需要在后台执行两个命令
function "$arg1" "$agr2" arg3 && declare "workspaces=$arg3"
首先,如果完成,它将执行函数,然后它将初始化工作区中的arg3(它是全局变量),整个过程应该在后台运行
我试过
function "$arg1" "$agr2" arg3 && declare "workspaces=$arg3" & //this didn't work
(function "$arg1" "$agr2" arg3 && declare "workspaces=$arg3") & //niether this
我不想并行执行两者,因为在这种情况下工作区将不会初始化
答案1
我相信您遇到的问题是您期望全局变量$workspaces
被设置为该函数的结果。但是,您无法export
从子 shell 在当前 shell 上设置全局变量(在 shell 术语中为 )。在后台运行命令的唯一方法是在子 shell 中运行它。因此,运行declare
或export
作为后台命令的一部分不会在当前 shell 中设置该变量,这似乎是您想要实现的目标。
答案2
我真的不清楚你想做什么。
我的猜测是,您可以使用parset
GNU Parallel 作为解决方案的一部分:
# Activate parset
. `which env_parallel.bash`
export -f myfunction
parset myresult -j0 myfunction {} ::: arg1 arg2 arg3
echo "${myresult[0]}"
echo "${myresult[1]}"
echo "${myresult[2]}"
这将并行运行这些命令:
myfunction arg1
myfunction arg2
myfunction arg3
并将它们每个的输出放入数组中myresult
。