質問編集履歴

1 プログラム修正

退会済みユーザー

退会済みユーザー

2019/04/02 17:10  投稿

サブシェルで実行したコマンドをwait するshell script を作成したい.
### 前提・実現したいこと
shell script
サブシェルの内容をwaitするスクリプトを作成したい
### 発生している問題・エラーメッセージ
waitコマンドが思っているように動作しない。
現状以下のソースコードを実行した際にサブシェルがを待たずに次の処理が起こってしまうため解決方法
のご教授をお願いいたします。
### 該当のソースコード
```sh
#/bin/sh
PIDS=/hoge/pids
MYDIR=`dirname $0`
touch $PIDS
chmod 666 $PIDS
pids=`cat $PIDS`
test_wait()
{
su - oracle -c "($MYDIR/expdp.sh;$MYDIR/compress.sh)" &
test_pid=$!
echo $test_pid
echo $test_pid >>$PIDS
}
ORATAB=/var/opt/oracle/oratab
use_oratab()
{
   while read LINE
       do
       case $LINE in
       \#*)
       continue
       ;;
       *)
       ORA=`echo $LINE | awk -F: '{print $1}' -`
       if [ X"$ORA" = 'X' -o X"$ORA" = 'X*' ] ; then
               continue
       fi
       if [ `echo $ORA | cut -b 1` = '+' ]; then
               continue
       fi
       if [ `echo $ORA | cut -b 1` = '-' ]; then
               continue
       fi
   test_wait
   test_pid2=$!
   echo "$test_pid"  
   echo "$test_pid2"
       ;;
       esac
       done < $ORATAB
}
#main
use_oratab
echo "oratab start"
echo $pids
echo "wait start"
while read LINE2
do
wait $LINE2
echo "$LINE2 wait finish"
done < $PIDS
echo "wait finish"
echo "test_success"
rm $PIDS
exit 0
```
```
# expdp.sh
オラクルexpdpの処理です
```
```
#compress.sh expdpで作成したファイルの圧縮
tar cvf /hoge/expdp | gzip -c > /hogehoge/expdp_hoge.tar.gz
```
### 試したこと
上記のようなスクリプトで試してみましたがwaitが思ったように動作せず...
### 補足情報(FW/ツールのバージョンなど)
wait させたいのは expdp.sh, compress.sh の処理になります。
動作環境はSolaris 10
使用しているshell の変更はできませんので、
宜しくお願いいたします。
  • UNIX

    550 questions

    UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

  • sh

    498 questions

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

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