- ベストアンサー
Bourne Shellでネストした上位シェルに$?を返す方法
Bourne Shellでは$?で直前のコマンドのステータスを確認できるようですが、これとは逆にネストした上位シェルに$?を返す事はできますか? aaaa.sh から bbbb.sh を呼び出しているとして、その呼び出した直後に$?でステータスを確認する場合、 bbbb.sh 側ではどのように戻り値をセットすれば良いですか?
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
話が込み入っているようですが・・・ 単純に子プロセス(下位シェル)で、 exit 4 とすれば、親プロセス(上位シェル)で参照できます。
その他の回答 (6)
- notnot
- ベストアンサー率47% (4901/10362)
>既存のコードに書かれているコマンドの意味を調べるには十分でも、やりたい事が可能かどうか? >可能ならどういうコマンドをどのように利用するのか? >という目的先行の場合には十分でないからです。 まず、man sh を読んで全部頭に入れてください。もし入りきればそれで「やりたい事が可能かどうか?可能ならどういうコマンドをどのように利用するのか?」はわかるはず。 >この場合 >bbbb.shで >exit $? >としておき、 >aaaa.sh側で >if $? >then >処理 >fi > >とするのでしょうか? そもそも、「Bourne Shellでは$?で直前のコマンドのステータスを確認できる」を理解されてないようですが。 まず、子スクリプトのほうは上にお書きのとおりでOKです。 親スクリプトのほうは、直前のものがコマンドであろうが、子シェルスクリプトであろうが同じです。 if test $? = 0 then 成功のときの処理 else 失敗のときの処理 fi test コマンドには [ という別名もあるので、 if [ $? = ] でもかまいません。
お礼
>まず、man sh を読んで全部頭に入れてください。 >もし入りきればそれで「やりたい事が可能かどうか?可能ならどういうコマンドをどのように利用するのか?」はわかるはず。 たしかに、その通りかもしれませんが、 では法律について質問している人がいたら 「六法全書を全て頭に入れて下さい。そして過去の事例を合わせて考えれば分かるはずです」 と答えるのでしょうか? >if test $? = 0 >then 成功のときの処理 >else 失敗のときの処理 >fi > >test コマンドには [ という別名もあるので、 >if [ $? = ] >でもかまいません。 有難う御座います。参考になりました。
- sakusaker7
- ベストアンサー率62% (800/1280)
違ったキーワードで検索すれば異なる結果が得られる可能性があるわけで、 そういった意図でお聞きしたのですが明らかにしたくないということであれば 無理強いはしません。 ということでわたしもわたしの自由を行使させていただきます。
お礼
結局のところ、 あたなのレスは「説教はしたいが答えは教えたくない」という事ですね。 それではタダのアラシです。
- sakusaker7
- ベストアンサー率62% (800/1280)
参考までにどんなキーワードで検索したか補足してもらえませんか? それから、 > 既存のコードに書かれているコマンドの意味を調べるには十分でも、やりたい事が可能かどうか? > 可能ならどういうコマンドをどのように利用するのか? > という目的先行の場合には十分でないからです。 ということなら、むしろネット上を探すよりは Amazon.co.jp: UNIXシェルスクリプト逆引き大全333の極意―Linux,FreeBSD,Solaris,Mac OS X対応: 本: 中橋 一朗 http://amazon.jp/dp/4798008842 こういう本を用意しておいたほうがいいんじゃないでしょうか。 これのほかにも同様の趣旨の本があったような気もしますが それも含めて自分の目で確かめてみてください。 ネット上にはピンポイントな情報ならあふれているでしょうけれども 体系的にまとめているようなところはあまりないと思います。
補足
>参考までにどんなキーワードで検索したか補足してもらえませんか? ここは質問と回答やりとりをするところです。 掲示板の主旨からから脱線するので控えさせていただきます。 この場合 bbbb.shで exit $? としておき、 aaaa.sh側で if $? then 処理 fi とするのでしょうか? bbbb.shで 環境変数にexportしておいて aaaa.sh側でその内容を確認する形でもいけそうですが、 それはあまり一般的な方法ではないでしょうか?
- Tacosan
- ベストアンサー率23% (3656/15482)
まずは #2 で言われている通り man sh が基本でしょう. 普通の用途にはこれで十分. ネットでも適当にキーワードを入れれば探せると思うんだけどなぁ. とりあえず最初に見付かったのが http://hemsidor.torget.se/users/d/Devlin/shell/man_sh.html
補足
ネットで適当にキーワードを入れれば、Bourne Shell以外のシェルのサンプルコードが大量にヒットして目的にあったサイトがなかなか見つからなかったりするのです。
- sakusaker7
- ベストアンサー率62% (800/1280)
> Bourne Shellのマニュアルってどこかネット上にありますか? なぜネット上? man sh じゃ不足なんでしょうか。 まあネット上にもマニュアル、解説含め転がってはいますが。
補足
>なぜネット上? >man sh じゃ不足なんでしょうか。 既存のコードに書かれているコマンドの意味を調べるには十分でも、やりたい事が可能かどうか? 可能ならどういうコマンドをどのように利用するのか? という目的先行の場合には十分でないからです。
- Tacosan
- ベストアンサー率23% (3656/15482)
マニュアルを読めばわかると思うんだけど exit.
補足
Bourne Shellのマニュアルってどこかネット上にありますか?
お礼
有難う御座いました。