ターミナルコマンドでタイトルに指定された操作を実行する方法はありますか?それともコードを見るべきですか?
答え1
終了コードは、プログラム終了の成功または失敗を示します。範囲は 0 ~ 255 です。シェルとその組み込み機能は、特定の障害モードを示すために125以上の値を使用することができるため、コードリストはシェルとオペレーティングシステムによって異なります(たとえば、Bashは128以上の値を使用します)窒素終了状態へ)。望むより:Bash - 3.7.5終了ステータスまたはman bash
。
一般的に言えば、0終了ステータスはコマンドを示します。成功と 0以外終了ステータスの表示失敗する。
コマンドがどのエラーコードを返すかを確認するには、$?
最後の終了コードを印刷するか、終了ステータス値の${PIPESTATUS[@]}
リストを指定します。管路(Bashで)シェルスクリプトが終了した後。
すべての終了コードの完全なリストを見つけることはできませんが、カーネルソースコードで終了ステータス番号を体系化しようとしました。ただし、これは主にC / C ++プログラマーを対象としており、同様のスクリプト標準が適切である可能性があります。
/usr/include/sysexits.h
Linuxおよび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
、BSDman 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 3809
3809%256 = 225なので、終了コード225が提供されます)。
望むより:
- 付録E.特別な意味を持つ終了コード高度なバッシュスクリプトガイド
- より良いシェルスクリプトを書く - パート2イノベーションセンターで
答え2
所与の端末コマンドの終了状態の意味を得る「秘密」はない。
私のもの最初このマンページを試してください。
user@host:~# man ls
Exit status:
0 if OK,
1 if minor problems (e.g., cannot access subdirectory),
2 if serious trouble (e.g., cannot access command-line argument).
第三:bash などのシェルの終了状態です。 Bashと組み込み機能は、具体的には125以上の値を使用できます。 127は命令が見つからないことを意味し、126は命令を実行できないことを意味する。詳細については、次を参照してください。バッシュ終了コード。
答え3
コード/文書を見てください。しかし、「標準化」に一番近いのはエラー番号
答え4
私が知る限り、約2つの標準値しかありません。どちらもstdlib.h
exit()で使用するように定義されています。
- 終了_成功(=0)
- 終了_失敗(=1)
世界のすべてのプログラムに対して同じ意味を持つ唯一の事実上の標準値は、成功を示すゼロ(ゼロ)です。
さまざまなプログラムは、さまざまなエラー(タイプまたは重大度)を区別または強調するために、さまざまな戻り「失敗」コードのリストを導入します。一部のプログラムは戻り値を使用して、見つかったランタイムエラーの整数(たとえば、ファミリで失敗したユニットテストの数)を報告します。
私は拡張するためにいかなる種類の「新しい標準」も導入することをお勧めしません。stdlib.h