Faire en sorte que l'invite du shell Linux affiche la dernière valeur de retour

12

Je suis actuellement sur une machine Linux et l'invite du shell me montre la dernière valeur de retour et le nombre de commandes exécutées (photo incluse, avec ces nombres affichés en violet).

Mon propre ordinateur ne l'a pas, comment puis-je le configurer?
J'utilise Xubunto, si plus de détails sont nécessaires, faites le moi savoir - je ne suis pas beaucoup un utilisateur Linux (je ne sais pas ce qui est pertinent ici).

exemple

Eran
la source
C'est trop vague pour répondre. Quelles sont ces commandes que vous exécutez? Quel est votre ordinateur (OS) qui n'a pas cela?
Chris Ting
J'ai dit que mon système d'exploitation est Xubuntu, et cela n'est lié à aucune commande spécifique, c'est juste quelque chose qui est toujours affiché.
Eran

Réponses:

10

Il semble que ce bashsoit le shell par défaut de Xubuntu .

Modifiez .bashrcou .bash_profile(selon la configuration de votre système) et recherchez une ligne commençant par PS1=. Cette ligne définit votre invite .

Pour ajouter la valeur de retour de la dernière commande, ajoutez ce qui suit à cette ligne:

`echo -n $?`

il ressemble donc par exemple à ce qui suit (mon invite actuelle, simplifiée):

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

Cela ressemblera à ceci, avec _le curseur:

danielbeck in ~ (0)
 -> $ _

Vous pouvez également utiliser la variable d'environnement PROMPT_COMMANDpour ajouter le code retour à votre invite:

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

Cela ajoutera par exemple (0)juste avant votre invite autrement non modifiée.


Vous obtenez le "compteur" en ajoutant \#à votre invite: c'est le numéro de commande . Le numéro d'historique , qui ne démarre pas à 1, peut être plus utile , mais vous permet d'exécuter n'importe quelle commande en entrant un point d'exclamation, suivi du numéro d'historique de la commande:

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

Après quelques parties supplémentaires:

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

Cela ne montrera la valeur de retour que si elle est différente de zéro, sur sa propre ligne. Le numéro de commande et le numéro d'historique sont sur la même ligne que la commande que vous allez saisir:

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

La variable $?contient le code de sortie du dernier programme exécuté.

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

Je pense que vous pouvez obtenir le "nombre de commandes exécutées" en utilisant un incrémenteur

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

Ensuite, vous devrez modifier la variable PS1 / PS2 dans votre .bashrc pour changer l'invite. Cela semble être un guide décent (sauf qu'il recommande de modifier / etc / bashrc, je ferais juste ~ / .bashrc).

Mat
la source
1
Merci, je vais l'essayer plus tard quand je serai sur mon propre ordinateur et je verrai comment ça se passe.
Eran
1

Pour info, si vous utilisez zsh c'est encore plus facile. Cette construction: %(?..%F{red}%?%f)signifie afficher le dernier niveau d'erreur des commandes en rouge si ce n'est pas zéro (normal), mais si c'est normal, ne rien montrer. Les %(1j.[%j].)moyens de construction indiquent le nombre actuel de tâches d'arrière-plan entre crochets.

Keith
la source