終了コード(および/または戻りコード)のリストとコマンド/ユーティリティの意味をどのように取得できますか?

終了コード(および/または戻りコード)のリストとコマンド/ユーティリティの意味をどのように取得できますか?

ターミナルコマンドでタイトルに指定された操作を実行する方法はありますか?それともコードを見るべきですか?

ベストアンサー1

終了コードは、プログラム終了の成功または失敗を示します。範囲は 0 ~ 255 です。シェルとその組み込み機能は、特定の障害モードを示すために125以上の値を使用することができるため、コードリストはシェルとオペレーティングシステムによって異なります(たとえば、Bashは128以上の値を使用します)窒素終了状態へ)。望むより:Bash - 3.7.5終了ステータスまたはman bash

一般的に言えば、0終了ステータスはコマンドを示します。成功と 0以外終了ステータスの表示失敗する

コマンドがどのエラーコードを返すかを確認するには、$?最後の終了コードを印刷するか、終了ステータス値の${PIPESTATUS[@]} リストを指定します。管路(Bashで)シェルスクリプトが終了した後。

すべての終了コードの完全なリストを見つけることはできませんが、カーネルソースコードで終了ステータス番号を体系化しようとしました。ただし、これは主にC / C ++プログラマーを対象としており、同様のスクリプト標準が適切である可能性があります。

/usr/include/sysexits.hLinuxおよびBSD / OS Xのいくつかのsysexitのリストとプログラムのデフォルトの終了コード(64-78)は、次の場所man sysexits(またはBSD)にあります。

0   /* successful termination */
64  /* base value for error messages */
64  /* command line usage error */
65  /* data format error */
66  /* cannot open input */
67  /* addressee unknown */
68  /* host name unknown */
69  /* service unavailable */
70  /* internal software error */
71  /* system error (e.g., can't fork) */
72  /* critical OS file missing */
73  /* can't create (user) output file */
74  /* input/output error */
75  /* temp failure; user is invited to retry */
76  /* remote error in protocol */
77  /* permission denied */
78  /* configuration error */
/* maximum listed value */

上記のリストは、以前に使用されていなかった終了コード64-78を割り当てます。未割り当ての終了コードの範囲は今後さらに制限される予定です。

ただし、上記の値は主にsendmailで使用され、他の場所ではほとんど使用されていないため、標準からは離れています(指摘されているように)ザイルズ)。

シェルの終了ステータス値は次のとおりです(Bashベース)。

  • 1- 125- コマンドが正常に完了しませんでした。状態が何を意味するのかを知るには、コマンドのマニュアルページを確認してください。以下はいくつかの例です。

  • 1- よく発生する間違いをすべてキャッチしてください

    「ゼロで割る」など、さまざまなエラーやその他の許可されていない操作です。

    例:

      $ let "var1 = 1/0"; echo $?
      -bash: let: var1 = 1/0: division by 0 (error token is "0")
      1
    
  • 2- シェル内蔵乱用(Bash文書による)

    欠落しているキーワード、コマンド、または権限の問題(およびバイナリ比較が失敗した場合はdiff戻りコード)

    例:

       empty_function() {}
    
  • 6- そのデバイスまたはアドレスがありません。

    例:

      $ curl foo; echo $?
      curl: (6) Could not resolve host: foo
      6
    
  • 124- コマンドタイムアウト

  • 125- コマンド自体が失敗した場合(参照:コアツール)

  • 126- コマンドが見つかりましたが呼び出せない場合(例:実行できない場合)

    権限に問題があるか、コマンドを実行できません。

    例:

      $ /dev/null
      $ /etc/hosts; echo $?
      -bash: /etc/hosts: Permission denied
      126
    
  • 127- コマンドが見つからない場合、コマンドを実行するために生成されたサブプロセスはこの状態を返します。

    $PATH質問や誤字がある可能性があります。

    例:

      $ foo; echo $?
      -bash: foo: command not found
      127
    
  • 128- 無効なパラメータexit

    終了は、0から255の範囲の整数引数のみを受け入れます。

    例:

      $ exit 3.14159
      -bash: exit: 3.14159: numeric argument required
    
  • 128- 254- 致命的なエラー信号 'n' - 信号の受信によりコマンドが終了しました。ステータス(Linux:man 7 signal、BSD man signal:)を取得するには、128(128 + SIGNAL)にシグナルコードを追加します。以下はいくつかの例です。

  • 130- Ctrl-C、130-128 = 2(SIGINT)を押してコマンドを終了しました。

    例:

      $ cat
      ^C
      $ echo $?
      130
    
  • 137- コマンドがKILL(9)信号(128+9)を送信する場合、そうでなければコマンドの終了ステータス

    kill -9 $PPIDスクリプト。

  • 141- SIGPIPE- リーダーなしでパイプに書き込む

    例:

      $ hexdump -n100000 /dev/urandom | tee &>/dev/null >(cat > file1.txt) >(cat > file2.txt) >(cat > file3.txt) >(cat > file4.txt) >(cat > file5.txt)
      $ find . -name '*.txt' -print0 | xargs -r0 cat | tee &>/dev/null >(head /dev/stdin > head.out) >(tail /dev/stdin > tail.out)
      xargs: cat: terminated by signal 13
      $ echo ${PIPESTATUS[@]}
      0 125 141
    
  • 143- 信号コード15(128+15=143)により命令が終了しました。

    例:

      $ sleep 5 && killall sleep &
      [1] 19891
      $ sleep 100; echo $?
      Terminated: 15
      143
    
  • 255* - 終了ステータスが範囲外です。

    終了は、0から255の範囲の整数引数のみを受け入れます。

    例:

      $ sh -c 'exit 3.14159'; echo $?
      sh: line 0: exit: 3.14159: numeric argument required
      255
    

上記の表によると、終了コード1 - 2、126 - 165、および255は特別な意味を持ち、ユーザーが指定した終了パラメータには使用しないでください。

範囲外の終了値は、予期しない終了コードが発生する可能性があることに注意してください(例:exit 38093809%256 = 225なので、終了コード225が提供されます)。

望むより:

おすすめ記事