bashで実行されるすべてのコマンドは、終了コードを返します。
bashプロンプトでコマンドを入力するたびに、終了ステータスを表示する、つまり、 echo $?
たとえば、echo "hello";
bashプロンプトで実行すると、出力は次のようになります。
linux@linux$ hello
linux@linux$ 0
bashで実行されるすべてのコマンドは、終了コードを返します。
bashプロンプトでコマンドを入力するたびに、終了ステータスを表示する、つまり、 echo $?
たとえば、echo "hello";
bashプロンプトで実行すると、出力は次のようになります。
linux@linux$ hello
linux@linux$ 0
回答:
最後に実行されたコマンドの終了コードは$?
環境変数に保存されます。そのため、この変数をデフォルトのコマンドプロンプトに追加するだけで、そこに終了コードが常に出力されます。プロンプトは$PS1
環境変数に保存されます。最初は/etc/bash.bashrc
スクリプトで設定され、後で$HOME/.bashrc
。
そのため、デフォルト値から行を編集します$HOME/.bashrc
(/etc/bash.bashrc
システム全体になります)。
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
これに(たとえば):
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w[$?] \$ '
したがって、デフォルトのプロンプトは次のように変更されます。
user@host:/path/to/dir[0] $
括弧内の0は終了コードです。以下を参照してください。
user@host:~[0] $ ls
user@host:~[0] $ ls /root/
ls: cannot open directory /root/: Permission denied
user@host:~[2] $ ^C
user@host:~[130] $
意味については、http: //www.tldp.org/LDP/abs/html/exitcodes.htmlを参照してください
readlink /proc/$$/exe
please の出力をコピーできますか?0はエラーがないことを意味します。エラーが発生する何かを試しましたか:^C
またはfalse
またはasdasdasd
?
PS1=$(printf "%s\\\\u@\h:%s%s\w[$?]$%s " "$yellow" "$end" "$blue" "$end")
表示され0
ます。理由は何ですか?
$?
は0
、の設定時にが既に展開されているためPS1
です。行いecho $PS1
、あなたが表示されます。単一引用符を使用するか、のようにエスケープする必要があり\$?
ます。
私はから選んだことを別の方法アーチのWikiを使用することにしましたtrap
。
EC() { echo -e '\e[1;33m'code $?'\e[m\n'; }
trap EC ERR
効果:
$ ( exit 1 )
code 1
$ some-non-existent-command
some-non-existent-command: command not found
code 127
$
以下に簡単な例を示します。
PS1='$? > '
二重引用符を使用する場合、バックスラッシュを追加してエスケープする必要があります$
:
PS1="\$? > "
出力:
0 > echo 'ok'
ok
0 > bogus
bogus: command not found
127 >
さらに良い方法は、ゼロ以外の場合にのみ終了コードを出力することです。
PS1='${?#0}> ' # single quote example
PS1="\${?#0}> " # double quote example (requires extra backslash)
サンプル出力:
> echo 'ok'
ok
> bogus
bogus: command not found
127>
説明:${var#pattern}
は、bashパラメーター拡張であり、$ varの先頭から最短一致パターンを削除することを意味します。そのため、この場合、0
の前から削除し$?
ます0
。これにより、の終了コードが効果的に切り捨てられます。
二重引用符を使用する場合、毎回評価されるのではなく、が設定されている$?
ときに置換PS1
されます。にecho $PS1
ハードコードされた値がないことを確認してくださいPS1
。