• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:dieによる終了コード(ステータス)は変化するのですか?)

dieによる終了コードの変化について

このQ&Aのポイント
  • dieによる終了コード(ステータス)は変化するのですか?Windows2000+ActivePerlの環境で、dieによって終了した場合、そのスクリプトを呼び出した元のバッチなどでステータスを確認すると通常は「255(-1)」になっています。
  • しかし、場合によっては「1」や「9」になる場合があり、その理由が分かりません。例えば、特定のスクリプトで終了コードを確認した場合、終了コードが255でなく「1」や「9」となることがあります。
  • この現象の理由について教えてください。なぜdieによる終了コードが一貫して「255(-1)」ではなく異なる値になるのか、理由を知りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

perldoc -f die を読んで貰うとわかると思いますが die で終了したときの終了ステータスは $! || ($? >> 8) || 255 です

supob
質問者

お礼

perldoc -f die の内容を確認いたしまして、理解できました。 ご教示ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 終了ステータスの確認

    基本的な事ですみませんが、2点程確認したい事があります。 1.あるシェルがあり、プログラムを実行しています。 ---------------------------- echo 'プログラム start' /export/program > /export/keka.lst echo 'プログラム end' ---------------------------- このシェルの終了ステータスは、 プログラムの実行結果になるのでしょうか? 最後にechoを出力しているので、 終了ステータスはechoの結果(必ず正)にはならないんですよね? 2.複数の処理A、B、Cがあるとします。 処理Aの結果を終了ステータスとしたい場合、 概ね以下のような方法で良いのでしょうか? (処理B、処理Cがどのような結果でも処理Aの結果を返す) ------------------------ 処理A ENDSTATUS=$? 処理B 処理C exit ${ENDSTATUS} ------------------------ 以上、片方でも構いません。よろしくお願いします。

  • DOS終了コードの確認

    有識者の方、バッチファイルの終了コードの確認方法について、ご教授願います。当方、終了コード判定のBAT作成は初めてです。 質問: TXT(a.txt)ファイル、文字列検索を行った結果、該当の文字列が見つかった場合、終了コードを"0"では無く、"1"でバッチファイルを終了する場合(EXITコマンド終了コード1)、バッチファイルの終了コード"1"が正しく出されているのか確認の仕方を教えてください。 よろしくお願い致します。 +++temp.bat+++++ Find C:\temp\a.txt "aaa" →%ERRORLEBEL%の結果 0 IF NOT ERRORLEVEL 1 (exit /B 1)

  • ストアドプロシージャの戻り値が取得できない

    ストアドプロシージャの戻り値が取得できない ストアドプロシージャ内でSelectとUpdateを行い、設定した戻り値をリターンしたいのです。 ついでにSelectとした複数行の結果の読み込みもしたいのですが。 Dim cmd As New System.Data.SqlClient.SqlCommand Dim i As Integer Dim readerA As System.Data.SqlClient.SqlDataReader cmd.CommandType = Data.CommandType.StoredProcedure cmd.CommandText = "SP名" cmd.Parameters.Add("A", System.Data.SqlDbType.Int) cmd.Parameters("A").Direction = System.Data.ParameterDirection.ReturnValue readerA = cmd.ExecuteReader() i = cmd.Parameters("A").Value if (i = 0) Then 処理 End If While readerA.Read() 処理 End While 上記でSelectした結果をreaderA("カラム名") で読みこめているのですが、戻り値Aの値が取得できていません。 ウォッチ式でcmd.Parameters("A").Valueを見るとNothingになっています。 ちなみに、違うストアドを実行しているところでは戻り値は取得できています。。。 ストアドがおかしいんでしょうか。Selectの取得結果も見ようとしているのがまずいのでしょうか。 環境はvb.net、SQLServer2005です。

  • WSHプログラミングで、Shell実行プロセスが終了しない内に、次の処理が実行されちゃいます・・・

    WSH(WindowsScriptingHost)でプログラミングを行っております。 以下のように、「A.exe」実行後、「B.exe」を実行するようにスクリプトを記述しています。 ところが、実際に実行してみると、「A.exe」が終了しない内に、「B.exe」が実行されてしまっている様なのです。 しかし、プログラム処理上、「A.exe」が実行終了してからでないと、「B.exe」を実行するのはまずいのです。 WSHで、「A.exe」が実行終了するまで、「B.exe」を実行させないようなスクリプトの記述方法を教えて下さい。 Set Shell = CreateObject("WScript.Shell") Shell.Run "cmd.exe /c D:\A.exe" Shell.Run "cmd.exe /c D:\B.exe"

  • Access2002 終了時の処理

    フォーム及びアクセスを誤って終了させることのないよう、フォーム内ボタンもしくは右上×をクリックした時、以下のモジュールで確認ボタンを表示させようとしています。 ======================== Private Sub Form_Close() '閉じるとき確認 2004/6/9 If MsgBox("システムを終了しますか?", vbYesNo + vbQuestion, _ "終了確認") = vbNo Then Cancel = False End If End Sub ======================== システムを終了しますか?のコメントとともにYes No ボタンも出ますが、Noを押しても終了してしまいます。終了しないようにするにはどのようにすればよいのでしょうか? いつもすみません。よろしくお願いします。

  • Perl中で teeを使っても戻り値を得たい

    例えば make compile |& tee log とすると、tee のせいでmake の戻り値が得られないということに関しての相談です。 いま、perlの中で、 > $cmd = "$make compile 2>&1| tee compile.log"; > $rval = system($cmd); > if($rval){ print "Error\n"} のような使い方をしています(実際は$rval >>8 とする必要があるようです)。 上記のようにログを端末に表示し、ファイルにも落とし、かつ戻り値も利用したい、という場合、どのようにしたらよいのでしょうか。 # BASHでは echo ${PIPESTATUS[0]} で得られる、 # Perl のTee Moduleがあるなどの情報だけは発見できたのですが。。。 宜しくお願い致します。

  • functionから抜けることができません、強制終了したいです。

    function A(xxx) { B(xxx); C(xxx); } function B(xxx) { if (xxx == "yyy") {ここでBから抜けてさらにAも抜けたい。} return(xxx); } こんな時どうすればいいのでしょうか? javascriptですとexitはありませんしquitもありません。 breakも違うようです…スクリプトの強制終了はどうすれば良いのでしょうか。

  • 想定外の戻り値に付いて

    Linux系OSのシェルスクリプトについて質問です。 スクリプトの内容としては各主要サービスの起動と停止を行う内容になります。 ここでお伺いしたい内容はスクリプトの途中でサービスが起動しているかどうか、grepの戻り値によって処理を変更する場合にgrepの戻り値がどうにもおかしい場合、どのような原因が考えられるか、ということです。 【スクリプト内容(抜粋)】 #!/bin/bash ---中略--- echo "Apache2起動前確認" | tee -a ${LOG} ps -ef | grep apache2 | grep -v "grep" > /dev/null if [ $? == 0 ]; then ---省略--- 上記の内容はapache2を起動する際、apache2が起動していれば処理を中止する内容の一部ですが、当然起動していればpsコマンドで内容が出るのでgrepの戻り値は0になり、「then」の内容が実施されます。 これはこれで完成されているので問題なく稼動します。 しかしこれとまったく同じ内容で、apache2をmysqlに変更したものが問題でこちらが正常に動作しないのです。 【スクリプト内容(抜粋)】 #!/bin/bash ---中略--- echo "MySQL起動前確認" | tee -a ${LOG} ps -ef | grep mysql | grep -v "grep" > /dev/null if [ $? == 0 ]; then ---省略--- これだとなぜか停止しているときに戻り値が「0」、起動しているときに戻り値が「1」になってしまいます。 ifとpsの間に「echo $?」をかませてみても想定外の戻り値がセットされているためif文そのものには間違いはありません。 また、コマンドラインで「ps -ef | grep mysql | grep -v "grep" > /dev/null ; echo $?」を 実施しても戻り値は「1」に(停止している場合)なるのですが、スクリプト上では戻り値「0」がセットされるようです。 何ゆえこのような意図しない動作をするのか考えてもわかりません。 apache2の場合だと正常に動くだけになおわかりません。 因みに停止しているとき、起動しているときでまったく逆の戻り値がそれぞれ返ってきているようです。 どなたか原因がわかる人は教えてください、宜しくお願いいたします。

  • UWSC 終了と再起動

    UWSCで終了したスクリプトを再稼働させる手立てはない物かと模索しております。 実際に使用しているスクリプトについては文字数制限やプライバシーから提供することができませんので、省略した物を下に記載しておきます。 ---------------メイン---------------- //スレッド宣言 Thread A //メインループ While true      ・      ・      ・ Wend //並列処理(3秒ごとに) Procedure A   While true //ソフトが不具合で終了した場合スクリプト終了      ID = GetID("ソフト")     If (ID < 0) Then ExitExit         //特定の画像が表示された場合スクリプト終了 If Chkimg("画像.bmp",0) Then ExitExit //3秒待機 Sleep(3.0)   Wend Fend ------------------------------------ 目的としては、エラーを感知してExitExitでメインスクリプトを終了させた後、以下のような流れを作りたいのです。 終了(ExitExitでなくてもokです) ↓ ソフト再起動スクリプトの実行(再起用のスクリプトは制作済み) ↓ メインにもどる スレッド"A"でエラーのを行っているため。ContinueやRepeatによる操作ができないため、非常に困っております。 またメインスレッドは1万行近くある為、変更が非常に困難ですので、スレッドAのみで実現できればと考えております。 どうにも説明が難しく難解な文になってしまいましたが、ご理解いただければ幸いです。 分かる方がいらっしゃいましたら、是非ご回答の方お願いいたします。

  • MP3エンコードするRubyスクリプトをCronで定時実行すると途中までしか変換されない

    少しややこしいタイトルですいません。 VineLinuxです。下記のようなRubyスクリプト(問題部分抜粋)を毎日一回実行しています。スクリプトをコマンドラインで実行すると問題ないのですが、cronで定時実行するとwavファイルの70%くらいのみmp3に変換されて終了します。何か原因にお気づきの方お教えいただけると幸いです。 cmd="/usr/local/bin/gogo -b 64 hogehoge.wav hogehoge.mp3" system(cmd)