返信ありがとうございます。
言葉が足りず申し訳ありません。
シェルは全てbashです。
「他人の書いたソフトがそうなっている」パターンです。
現在
A.sh(親シェル)
から
A_child.sh(子シェル)
を呼び出し、
A_child.sh内で
loader.shを呼び出しています。
loader.shはSQL*LOADERを呼び出す処理を、行っています。
loader.shはSQL*LOADERの処理の成否に応じて
成功なら、exit 0
失敗なら、exit 1
で終了します。
A_child.sh内にはtrapが記述してあり、
loader.shが、exit 1 で終了した場合、trap内の処理が実行されます。
今回、A_child.shに対して、
loader.shを呼び出した後にperlを呼び出す処理を追加する
という作業を行うことになったのですが、
perl内でexit 1を行うと、これまでの流れから考えれば当然なのですが、trapされてしまいます。
私が行いたいことは
例えばperl内での処理結果が3種類ある場合、
それぞれの結果に応じて(どの結果でも正常終了として扱いたい)
exit 1,exit 2,exit 3
と戻り値を変えて、
A_child.shで$?を使用しその戻り値を受け取り、
それを利用してA_child.sh内のその後の処理をif分岐させたい、ということです。
ちなみにperlはA_child.shから直接呼び出しています。
今回質問したいのは2点あります。
1、perlの最後にexit 0を記述すると、trapされずに処理が終了するが
exit 1など、0以外を記述するとtrapされ処理が終了してしまう。
どうすればperlからの「戻り値」をtrapさせずに$?で受け取ることができるか?
2、trapとは「シグナル」を捕捉するコマンド、bashやperl内のexit ** は「戻り値」を返すコマンド、だと認識しています。しかしtrapで捕捉されてしまう、ということは
exit ** で返しているのは「シグナル」なのか?それとも「戻り値」と「シグナル」は同じ意味なのか?先ほどの書き込みを読ませていただいた限り、やはり「戻り値」と「シグナル」は別物でexit ** は「戻り値」を返していると思うのですが・・。
長文になり申し訳ありません。
もしわかりましたらよろしくお願いいたします。
|