GNU Parallelを使用する場合、bashスクリプトでEXPORTを使用するのはどのくらい安全ですか?

GNU Parallelを使用する場合、bashスクリプトでEXPORTを使用するのはどのくらい安全ですか?

exportGNU Parallelを使用するときにbashスクリプトで使用するのはどのくらい安全ですか?

親スクリプトがあります。 parent.sh

(echo child.sh & echo child_two.sh) || parallel bash

wait
if [[ "$STATUS1" == "0" && "$STATUS2" == "0" ]];
then
    //continue
else
    //stop the process
fi

child.sh

STATUS1他のプロセスベースの取得

export STATUS1

child_two.sh

他のプロセスに基づいてSTATUS2をインポートする

export STATUS2

使用するのは安全ですか?export実行するたびに&の値が再び表示されますか?STATUS1STATUS2

答え1

環境変数は子プロセスに渡され、その逆の場合ではありません。

情報を親プロセスに転送するには、このデータを各子プロセスのファイルに保存し、子プロセスがcat終了した後にこのファイルにファイルを保存する必要があります。

tmp=$(mktemp -d)
child.sh $tmp/file & child_two.sh $tmp/file_two
wait 
cat $tmp/* 
rm $tmp -rf

一部の最適化を実行するには、より高いレベルの言語を使用できます。

答え2

勉強すれば役に立つと思います。parset https://www.gnu.org/software/parallel/parset.html

$ parset myvar 'echo do stuff with {};(exit {}); echo $?' ::: 0 0 1 2 3 0 0
$ echo "${myvar[3]}"

答え3

export破棄されるプロセスに変数を設定すると、これを行うことはできず、親はこれを見ることができません。

しかし、bashを使用すると仮定すると、次のいずれかは必要ありません。

child.sh &
child_two.sh &

wait -n
STATUS1=$?
wait -n
STATUS2=$?

wait -n終了ステータスを返す一つプロセスを繰り返して状態を取得します。その他

この方法の唯一の問題は、どの状態がどのプロセスから来るのかを知る方法がないことです(bashジョブ制御を読む必要がある場合)。

関連情報