Die Linux-Shell-Eingabeaufforderung zeigt den letzten Rückgabewert an

12

Ich bin zurzeit auf einem Linux-Computer und die Shell-Eingabeaufforderung zeigt mir den letzten Rückgabewert und die Anzahl der ausgeführten Befehle an (Bild eingeschlossen, wobei diese Zahlen in lila angezeigt werden).

Mein eigener Computer hat dies nicht. Wie kann ich es konfigurieren?
Ich benutze Xubunto, wenn weitere Details benötigt werden, lassen Sie es mich wissen - ich bin kein großer Linux-Benutzer (ich weiß nicht, was hier relevant ist).

example

Eran
quelle
Dies ist zu vage zu beantworten. Welche Befehle führen Sie aus? Was ist Ihr Computer (Betriebssystem), der dies nicht hat?
Chris Ting
Ich habe gesagt, mein Betriebssystem ist Xubuntu, und dies ist nicht auf einen bestimmten Befehl bezogen, es ist nur etwas, das immer gezeigt wird.
Eran

Antworten:

10

Es scheint bash ist Xubuntus Standard-Shell .

Bearbeiten .bashrc oder .bash_profile (abhängig von Ihrer Systemkonfiguration) und suchen Sie nach einer Zeile, die mit beginnt PS1=. Diese Linie setzt deine Prompt .

Fügen Sie der Zeile Folgendes hinzu, um den Rückgabewert des letzten Befehls hinzuzufügen:

`echo -n $?`

so sieht es z. wie folgt (meine aktuelle Eingabeaufforderung, vereinfacht):

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

Es wird so aussehen, mit _ als der Cursor:

danielbeck in ~ (0)
 -> $ _

Alternativ können Sie die Umgebungsvariable verwenden PROMPT_COMMAND So stellen Sie den Rückkehrcode Ihrer Eingabeaufforderung voran:

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

Dies wird z. (0) kurz vor Ihrer ansonsten nicht geänderten Eingabeaufforderung.


Sie erhalten den "Zähler" durch Hinzufügen \# Auf Ihre Aufforderung: Es ist die Befehlsnummer . Nützlicher könnte das sein Historiennummer , der nicht bei 1 beginnt, sondern es Ihnen ermöglicht, einen Befehl auszuführen, indem Sie ein Ausrufezeichen gefolgt von der Verlaufsnummer des Befehls eingeben:

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

Nach einigem zusätzlichen Spielen:

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

Dies zeigt den Rückgabewert nur dann an, wenn er nicht Null ist, und zwar in einer eigenen Zeile. Die Befehlsnummer und die Verlaufsnummer befinden sich in derselben Zeile wie der Befehl, den Sie eingeben möchten:

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

Die Variable $? Enthält den Exit-Code für das zuletzt ausgeführte Programm.

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

Ich denke, Sie können die "Anzahl der ausgeführten Befehle" mit einem Inkrementierer erhalten

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

Dann müssen Sie die PS1 / PS2-Variable in Ihrer .bashrc-Datei ändern, um die Eingabeaufforderung zu ändern. Diese scheint eine anständige Anleitung zu sein (außer es empfiehlt sich, / etc / bashrc zu ändern, ich würde einfach ~ / .bashrc machen).

Matt
quelle
1
Danke, ich werde es später versuchen, wenn ich an meinem eigenen Computer bin und sehen, wie es geht.
Eran
1

Zu Ihrer Information, wenn Sie zsh verwenden, ist es noch einfacher. Dieses Konstrukt: %(?..%F{red}%?%f) bedeutet, dass die letzte Fehlerstufe des Befehls in rot angezeigt wird, wenn sie nicht Null ist (normal), aber wenn sie normal ist, wird nichts angezeigt. Das Konstrukt %(1j.[%j].) bedeutet, dass die aktuelle Anzahl der Hintergrundjobs in eckigen Klammern angezeigt wird.

Keith
quelle