Cygwin なんでも掲示板

一覧最新記事過去一覧 | 検索FAQアンテナHOME
(新規投稿・発言はできません)

No.3314  Re[3]:perlからの戻り値
発言者: OZ
発言日: 2007 02/08 10:46
 
返信ありがとうございます。
言葉が足りず申し訳ありません。
シェルは全て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 ** は「戻り値」を返していると思うのですが・・。

長文になり申し訳ありません。
もしわかりましたらよろしくお願いいたします。


▼関連発言

3308:perlからの戻り値 [OZ] 02/05
 ├3309:Re:perlからの戻り値:追加 [OZ] 02/05
 │└3310:Re[2]:perlからの戻り値:追加 [zxcv] 02/05
 └3311:Re:perlからの戻り値 [oz] 02/06
  └3313:Re[2]:perlからの戻り値 [zxcv] 02/08
   └3314:Re[3]:perlからの戻り値 [OZ] 02/08
    ├3315:Re[4]:perlからの戻り値 [zxcv] 02/09

Pass 保存

早田のホームページへ
CGIROOM