タグ付けされた質問 「exit-status」

このタグは、質問がコマンドの終了ステータス(戻りコード)の決定または利用に関係している場合に使用します。一般的な構文には$?変数と&&および|| シンボル。

4
プロセスが終了したときのデフォルトの終了コード?
SIGINTまたはのようなハンドル可能なシグナルでプロセスが強制終了されたSIGTERMが、シグナルを処理しない場合、プロセスの終了コードはどうなりますか? 次のようなハンドルできない信号はSIGKILLどうですか? 私が知ることができることから、SIGINTおそらくプロセスを終了すると終了コード130が発生しますが、それはカーネルまたはシェルの実装によって異なりますか? $ cat myScript #!/bin/bash sleep 5 $ ./myScript <ctrl-c here> $ echo $? 130 他の信号をテストする方法がわかりません... $ ./myScript & $ killall myScript $ echo $? 0 # duh, that's the exit code of killall $ killall -9 myScript $ echo $? 0 # same problem


1
常に失敗して終了する標準コマンドはありますか?
失敗するコマンドでスクリプトをテストしたい。悪い引数を持つ既存のコマンドを使用できます。また、すぐに失敗して終了する簡単なスクリプトを書くこともできます。これらはどちらも簡単に実行でき、動作しますが、この目的のための標準コマンドがあれば、代わりにそれを使用したいと思います。


5
特定の戻りコードをすぐに返すUnixコマンド?
以下の私の例に似た何かをする標準のUnixコマンドはありますか $ <cmd here> 56 $ echo Return code was $? Return code was 56 $ <cmd here>forkで実行できるもので、プロセスの終了時に終了コードとして56を残すものでなければなりません。exitそしてreturnシェル組み込みコマンドは、私はそれから出たことで、彼らが起動したシェル自体に影響を与えるので、探しています何のためには適していません。<some cmd>は、シェル以外のコンテキストで実行できるものである必要がありますsubprocess。たとえば、を使用してPythonスクリプトから呼び出します。 たとえば、/usr/bin/false常にリターンコード1で直ちに終了しますが、そのリターンコードを正確に制御したいと思います。独自のラッパースクリプトを記述することで同じ結果を得ることができました $ cat my-wrapper-script.sh # i.e., <some cmd> = ./my-wrapper-script.sh #!/usr/bin/bash exit $1 $ ./my-wrapper-script.sh 56 $ echo $? 56 しかし、私のためにこれを行うことができる標準のUnixコマンドが存在することを望んでいます。


2
bashスクリプトの最後の終了コード
bashスクリプトの最後にある終了コードの意味について混乱しています:終了コード0は正常に終了したことを意味し、終了コード番号(もっと間違えなければ127)があることを知っています。 私の質問は、スクリプトの最後に終了コード0が表示される場合、スクリプトが失敗した場合や別の意味がある場合でも、終了コードを強制的に0に設定することです。

5
Bashで単一の感嘆符を入力するとどうなりますか?
Bashは、この質問に対する回答で説明されているように、履歴の展開に感嘆符を使用します(たとえばsudo !!、前のコマンドラインをで実行しますsudo)。ただし、次のコマンド(つまり、単一の感嘆符)の実行内容を説明する場所は見つかりません。 ! 何も印刷せずに1で終了するように見えますが、なぜそうなるのかわかりません。私はオンラインでBashのマニュアルページを見ましたが、「予約語」であるという事実以外には何も見つかりませんでした}。 } エラーを出力します: bash: syntax error near unexpected token `}'

3
後で使用するために終了コードを保存
そのため、いくつかのテストを実行するための小さなスクリプトがあります。 javac *.java && java -ea Test rm -f *.class ここでの問題は、スクリプトを実行する./testと、テストがrm -f *.class成功したために失敗した場合でも、成功の終了コードを返すことです。 私が望んでいることを実現することを考えることができる唯一の方法は、私にとってい感じです: javac *.java && java -ea Test test_exit_code=$? rm -f *.class if [ "$test_exit_code" != 0 ] ; then false; fi しかし、これは一般的な問題のように見えます-タスクを実行し、クリーンアップしてから、元のタスクの終了コードを返します。 これを行う最も慣用的な方法は何ですか(bashまたは一般的なシェルのみ)?



2
「ローカル」に終了コードをキャプチャさせる方法は?
私のプロジェクトには次のスニペットがあります: local output="$(bash "${1##*/}")" echo "$?" これにより、常に0が出力されますlocalが、削除するlocalと、$?変数が正しく動作します。これは、サブシェルからの終了コードを想定しています。 私の質問は、終了値をキャプチャしながら、この変数をローカルに保つにはどうすればよいですか?

4
コマンドの戻りステータスをテストしてバージョン管理システムを検出するBashスクリプト
いくつかの種類のVCSで使用したいbashスクリプトを作成しています。典型的なinfoコマンドを実行し、戻りコード、成功またはエラーを確認することにより、ディレクトリがシステムのリポジトリであるかどうかをテストすることを考えています。擬似コードでは: if a svn command succeded; Then run svn commands elif a darcs command succeded; Then run darcs commands elif a mercurial command succeded; then run hg commands else something else fi 私は、例えば、コマンドを実行することができます darcs show repoし、使用$?そのリターンコードを取得します。 私の質問は、戻りコード番号を1行で実行して返すためのきちんとした方法はありますか?例えば if [ 0 -eq `darcs show repo`$? ]; または、関数を定義する必要がありますか? 追加の要件として、stderrとstdoutの両方を印刷する必要があります。

2
ENOANO(アノードなし)は何のために使用する予定ですか?
この質問は単に怠惰な好奇心のためのものですが、他の人も好奇心をそそられるのではないかと思います。(Linux 2.6の)errno.hを検索すると、ENOANOに「アノードなし」が見つかりました。「陰極なし」エラーの兆候はありません。カーネルソースの一致を見ると、アノードと呼ばれるデバイスでは使用されていないようであり、一部のあいまいなデバイスドライバーによる意図的な奇抜なエラーコードとしてのみ使用されます。グーグルで興味のあることは何も明らかにされなかった。 冗談でしょうか?それはPOSIXなどの標準文書で定義されていますが、役に立ちませんか?

5
終了コマンドの終了コードをキャプチャする
私はこれをbashスクリプトに入れています: exit 3; exit_code="$?" if [[ "$exit_code" != "0" ]]; then echo -e "${r2g_magenta}Your r2g process is exiting with code $exit_code.${r2g_no_color}"; exit "$exit_code"; fi exitコマンドの直後に終了するように見えますが、これは理にかなっています。私はすぐに終了せずに終了コードを提供できるいくつかの簡単なコマンドがあるのだろうかと思っていましたか? 私は推測するつもりでした: exec exit 3 しかし、エラーメッセージが表示されますexec: exit: not found。私に何ができる?:)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.