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


12

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

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

例


これはあいまいすぎて答えられません。実行しているこれらのコマンドは何ですか?これがないコンピューター(OS)とは何ですか?
クリス・ティン

私のOSはXubuntuであると言いましたが、これは特定のコマンドとは関係なく、常に表示されるものです。
エラン

回答:


10

そうですbashXubuntuののあるデフォルトのシェル

編集する.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 $ _

5

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

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変数を変更して、プロンプトを変更する必要があります。 これはまともなガイドのように思えます(/ etc / bashrcの変更を推奨する場合を除き、〜/ .bashrcを実行するだけです)。


1
おかげで、後で自分のコンピューターにいるときに試してみて、どうなるか見ていきます。
エラン

1

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

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