在后台运行两个相关命令

在后台运行两个相关命令

我需要在后台执行两个命令

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 中运行它。因此,运行declareexport作为后台命令的一部分不会在当前 shell 中设置该变量,这似乎是您想要实现的目标。

答案2

我真的不清楚你想做什么。

我的猜测是,您可以使用parsetGNU 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

相关内容