web-dev-qa-db-ja.com

Linuxシェルプロンプトに最後の戻り値を表示させる

私は現在Linuxマシンを使用しており、シェルプロンプトに、最後の戻り値と実行されたコマンドの数が表示されます(画像が含まれています。これらの数値は紫色で示されています)。

私のコンピューターにはこれがありませんが、どうすれば設定できますか?
Xubuntoを使用しています。詳細が必要な場合は、お知らせください。私はLinuxユーザーではありません(ここで何が関係するのかわかりません)。

example

12
Eran

bashはXubuntuの デフォルトのシェル のようです。

.bashrcまたは.bash_profile(システム構成に応じて)を編集し、PS1=で始まる行を探します。この行は、プロンプトを設定します。

最後のコマンドの戻り値を追加するには、その行に次を追加します。

`echo -n $?`

だからそれは例えば次のように(私の現在のプロンプト、簡略化):

PS1='\u in \w (`echo -n $?`)\n -> \$ '

_がカーソルで、次のようになります。

danielbeck in ~ (0)
 -> $ _

または、環境変数Prompt_COMMANDを使用して、プロンプトの前にリターンコードを追加することもできます。

export Prompt_COMMAND='RET=$?; echo -n "($RET) "'

これにより、たとえば(0)他の方法で変更されていないプロンプトの直前。


プロンプトに\#を追加すると、「カウンター」が得られます。これはコマンド番号です。より便利なのは、履歴番号です。これは1から始まりませんが、感嘆符を入力してからコマンドを実行できます。コマンドの履歴番号:

984 $ foo
-bash: foo: command not found
985 $ !984
foo
-bash: foo: command not found
986 $ _

追加のプレイの後:

PS1='`RET=$?; if [ $RET != 0 ] ; then echo "rc $?"; fi`\n\u in `pwd`\n#\# !\! \$ '

これは、それ自体の行にゼロ以外の場合にのみ戻り値を表示します。コマンド番号と履歴番号は、入力するコマンドと同じ行にあります。

danielbeck in /Users/danielbeck/Downloads
#1 !984 $ foo
-bash: foo: command not found
rc 127
danielbeck in /Users/danielbeck
#2 !985 $ _
10
Daniel Beck

変数$?には、最後に実行されたプログラムの終了コードが含まれています。

ninth:~ sakkaku$ echo Hello World
Hello World
ninth:~ sakkaku$ echo $?
0
ninth:~ sakkaku$ cat asdasd
cat: asdasd: No such file or directory
ninth:~ sakkaku$ echo $?
1

インクリメンターを使えば「実行コマンド数」がわかると思います

ninth:~ sakkaku$ echo $[numcommands++]
0
ninth:~ sakkaku$ echo $[numcommands++]
1
ninth:~ sakkaku$ echo $[numcommands++]
2
ninth:~ sakkaku$ echo $[numcommands++]
3

次に、.bashrcのPS1/PS2変数を変更して、プロンプトを変更する必要があります。 This はまともなガイドのようです(/ etc/bashrcの変更を推奨している場合を除いて、〜/ .bashrcを実行します)。

5
Matt

参考までに、zshを使用すると、さらに簡単になります。この構成:%(?..%F{red}%?%f)は、最後のコマンドのエラーレベルがゼロ(通常)でない場合は赤で表示されますが、通常の場合は何も表示されないことを意味します。構成%(1j.[%j].)は、現在のバックグラウンドジョブの数を角かっこで囲んで表示することを意味します。

1
Keith