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