目的
- 時間がかかる処理を並行実行して、その結果を変数に入れたい。
- 実行結果をpasteコマンドを使って並べて表示させたい。
- 一時ファイルは使いたくない。
※なおpasteコマンド以外でも並べて表示できるなら何でも良いです
ソース
#!/bin/bash #関数定義 function AAA () { # 時間がかかる処理1 echo "AAA" echo "AAA" } function BBB () { # 時間がかかる処理2 echo "BBB" echo "BBB" } ################################# # MAIN 1 # 並列実行しないパターン。こっちは問題なく動く echo "MAIN1 display(side by side)" echo "---------" paste <(AAA) <(BBB) echo "==========" ################################# # MAIN 2 # こっちは失敗する argAAA="$(AAA)" & # ここがうまく動かない argBBB="$(BBB)" & # ここがうまく動かない wait echo "MAIN2 display(side by side) 2" echo "---------" paste <(echo "${argAAA}") <(echo "${argBBB}") echo "==========" echo "arg check" echo ${argAAA} echo ${argBBB}
結果
実行結果
$ bash test.sh MAIN1 display(side by side) --------- AAA BBB AAA BBB ========== MAIN2 display(side by side) 2 --------- ========== arg check
実行結果(bash -x)
$ bash -x test.sh + echo 'MAIN1 display(side by side)' MAIN1 display(side by side) + echo --------- --------- ++ AAA + paste /dev/fd/63 /dev/fd/62 ++ echo AAA ++ echo AAA ++ BBB ++ echo BBB ++ echo BBB AAA BBB AAA BBB + echo ========== ========== + wait ++ AAA ++ echo AAA ++ echo AAA + argAAA='AAA AAA' ++ BBB ++ echo BBB ++ echo BBB + argBBB='BBB BBB' + echo 'MAIN2 display(side by side) 2' MAIN2 display(side by side) 2 + echo --------- --------- + paste /dev/fd/63 /dev/fd/62 ++ echo '' ++ echo '' + echo ========== ========== + echo 'arg check' arg check + echo + echo
備考
"&"で指定したものは別のシェルで実行されると思うので
うまく動かないのはわかっているのですが、
別の解決法が浮かばないのです。
別の言語を使えば良かったとは思ってますが、
既にだいぶ書いてしまったので今更引き返せないのです。
並べて表示、という前提さえ無ければ、xargsで簡単解決だったのですが。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/08 05:17
2019/04/08 05:48