バックグラウンドで2つの関連コマンドを実行する

バックグラウンドで2つの関連コマンドを実行する

バックグラウンドで2つのコマンドを実行する必要があります。

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サブシェルでは現在、シェルにグローバル変数(シェル用語で)を設定することはできません。バックグラウンドでコマンドを実行する唯一の方法は、サブシェルで実行することです。したがって、バックグラウンドコマンドを実行するか一部として実行するdeclareexport、現在のシェルで変数は設定されません。これは達成しようとしているようです。

答え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

関連情報