質問編集履歴

1 違うバージョンのコードだったので書き直した

Alice1017

Alice1017 score 22

2016/08/06 00:24  投稿

Shellscriptで終了したJobのExit Statusを取得したい
お世話になります。
###前提・実現したいこと
【目標】 Shellscriptで終了したJobのExit Statusを取得する
任意のコマンドをバックグラウンドで実行し、実行している間くるくる型のプログレスバーを表示するというスクリプトを書いています。
このスクリプトでは、バックグラウンドで実行したコマンドの終了ステータスを取得したいのですが、以下のコードだと `display_progressbar` の**終了ステータスが返されてしまう**ので、どうにかして `display_progressbar` の中で終了ステータスを取得して、それをreturnしたい。
###現在のソースコード
```sh
#!/bin/bash
# coding: utf-8
display_progressbar() {
   code=0
   
   while :
       do
       # before display progressbar, exec "command &"
       jobs %1 >> .joblog 2>&1
       code=$?
       
       if [ $code != 0 ]; then
       if [ $? != 0 ]; then
           # ↓↓↓ 問題のある場所 ↓↓↓
           code=`cat .joblog | python -c "import sys;c=sys.stdin.read();print c.split('\\n')[-3].split()[2]"`
           break
       fi
       for char in '|' '/' '-' '\'; do
         echo -n $char
         sleep 0.1
         printf "\b"
       done
   done;
   rm .joblog
   return $code
}
sample() {
   sleep 3
   return 10
}
sample &
display_progressbar
echo "progressbar exit with: $?"
```
###試したこと
上記のコードでは、`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
```
よろしくお願いします。
  • sh

    401 questions

    shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る