export
GNU 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
実行するたびに&の値が再び表示されますか?STATUS1
STATUS2
答え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ジョブ制御を読む必要がある場合)。