プログラム実行後に戻り値を出力する


9

入力せずにターミナルでプログラムを実行するたびに戻り値を自動出力するオプションを設定する方法を知りたいですecho $?

セットアップできるものですか?Codeblocksにはその機能があります。

回答:


10

はい、2つの方法があります。一つは、セットにあるPROMPT_COMMAND.bashrcでセットコマンド置換に-その他、PS1のためecho $?のコマンド。

方法1:

bashマニュアルページから:

PROMPT_COMMAND

      If set, the value is executed as a command prior to issuing each
      primary prompt.

この変数を何に設定しても、毎回プロンプトを表示する前に実行されます。デモ:

$> PROMPT_COMMAND=" echo 'Last command exited with'  \$? 'code'  "
Last command exited with 0 code
$> ls /etc/passwd > /dev/null
Last command exited with 0 code
$> ls /etc/asdf > /dev/null
ls: cannot access /etc/asdf: No such file or directory
Last command exited with 2 code
$> 

の使用に注意してください\$?。永続的な変更のために、それを保存します.bashrc

方法2

私の仮定PS1プロンプトが次のように設定されています。

PS1='
user@ubuntu:$> '

このプロンプトが画面に再描画されるたびに(前の各コマンドの実行後に)プログラムを実行したい場合command substitution $(. . .) は、次のように使用してプロンプトで設定する必要があります。

PS1=' [ $? ] 
user@ubuntu: $> '

デモ:

$> PS1=' [ $? ]
> $>_ '
 [ 0 ]
$>_ ls /etc/passwd > /dev/null
 [ 0 ]
$>_ ls /etc/asdf > /dev/null                                                                                                      
ls: cannot access /etc/asdf: No such file or directory
 [ 2 ]
$>_ 

私は2行に私のPS1を分割することに注意して、トップがあります[ exitcode ]し、一番下 $> <blank space>'。これが、>$> 'に2行目にある理由です(先頭>PS2複数行コマンドのプロンプトです)。または、次のようなこともできます($'...'構造に注意してください)。

  $> PS1=$'[ $? ] \n$> '                                                                                                  
[ 0 ] 
$> 

+1実際に機能します。私は27kの評判がある人を疑っていませんが、プロンプトは「コマンド」ではないので、$を使用しますか?それで$を取得しませんか?私が思ったようにゼロにリセットします-エラーなしでエコーを実行する最初のメソッドを使用します。
Joe

PS1ユーザー入力を取得する前に印刷される単なるテキストです-それ以上のものはありません。パラメータの拡張やコマンドの置換の影響を受けない$(...)ため、たとえばに何でも入れることができ、$( pwd )そこに表示されます。たとえば、ラップトップのバッテリ電力を表示するためにカスタムスクリプトでそれを使用しました
Sergiy Kolodyazhnyy

@mchidどういう意味ですか?
Sergiy Kolodyazhnyy 2016年

1
@mchid「各プライマリプロンプトを発行する前」、つまり最後のコマンドの実行が終了した後。
kos 2016年

1
@mchidプロンプトが出力される前に実行されるので、次のコマンドを入力する前に実行されます。
muru 2016年

4

私がArch Wikiから選んだ方法はtrap ERRです。trap信号を受信したとき、または他の特定のイベントのためにコマンドを実行するためにBashで使用されます。ERR(それが正常に終了しなかった場合、戻り値は明らかに0になります)、戻り値は0ではない-トラップがエラーでいつでも現在のコマンドラインの終了RANです

したがって、たとえば:

trap 'printf "\ncode %d\n\n" $?' ERR

次に:

$ echo foo
foo
$ false

code 1

$

(注:echo正常に実行されたコマンドの後にメッセージが表示されません- コマンドを入力して端末が何もしないとはどういう意味ですか?

Arch Wikiのヒントは先に進み、メッセージに色を付けたので、目立つ黄色のメッセージが表示されます。

EC() { echo -e '\e[1;33m'code $?'\e[m\n'; }
trap EC ERR

効果:

ここに画像の説明を入力してください

実際、私がしなければならないのはcode、コマンドが失敗したことを知るために、出力の黄色を監視することだけです。

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