お世話になります。
###前提・実現したいこと
【目標】 Shellscriptで終了したJobのExit Statusを取得する
任意のコマンドをバックグラウンドで実行し、実行している間くるくる型のプログレスバーを表示するというスクリプトを書いています。
このスクリプトでは、バックグラウンドで実行したコマンドの終了ステータスを取得したいのですが、以下のコードだと display_progressbar
の終了ステータスが返されてしまうので、どうにかして display_progressbar
の中で終了ステータスを取得して、それをreturnしたい。
###現在のソースコード
sh
1#!/bin/bash 2# coding: utf-8 3 4display_progressbar() { 5 6 while : 7 do 8 # before display progressbar, exec "command &" 9 jobs %1 >> .joblog 2>&1 10 11 12 if [ $? != 0 ]; then 13 # ↓↓↓ 問題のある場所 ↓↓↓ 14 code=`cat .joblog | python -c "import sys;c=sys.stdin.read();print c.split('\\n')[-3].split()[2]"` 15 break 16 fi 17 18 for char in '|' '/' '-' '\'; do 19 echo -n $char 20 sleep 0.1 21 printf "\b" 22 done 23 done; 24 rm .joblog 25 return $code 26} 27 28sample() { 29 sleep 3 30 return 10 31} 32 33sample & 34display_progressbar 35echo "progressbar exit with: $?" 36
###試したこと
上記のコードでは、jobs %1
で出力されるデータを.joblog
というファイルに保存して、それをPythonで加工して終了ステータスを取得してます。シェルスクリプトなのでPythonに頼りたくないのですが、なにか方法はありますでしょうか?
ちなみに.joblog
の中身はこうなっています。9行目の10
という文字を取得しています。
[1]+ Running sample & [1]+ Running sample & [1]+ Running sample & [1]+ Running sample & [1]+ Running sample & [1]+ Running sample & [1]+ Running sample & [1]+ Running sample & [1]+ Exit 10 sample test.sh: line 11: jobs: %1: no such job
よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。