Chaque commande exécutée dans bash renvoie un code de sortie.
Chaque fois que je tape une commande à l'invite bash, je veux qu'elle affiche l'état de sortie, c'est-à-dire, echo $?
par exemple, si je lance echo "hello";
sur l'invite bash, la sortie devrait être:
linux@linux$ hello
linux@linux$ 0
Réponses:
Le code de sortie de la dernière commande exécutée est stocké dans la
$?
variable d'environnement. Vous pouvez donc simplement ajouter cette variable à l'invite de commande par défaut et vous aurez toujours le code de sortie imprimé là-bas. L'invite est stockée dans la$PS1
variable d'environnement. Il est initialement défini dans le/etc/bash.bashrc
script et plus tard dans le$HOME/.bashrc
.Modifiez donc la ligne
$HOME/.bashrc
(/etc/bash.bashrc
serait à l'échelle du système) à partir de sa valeur par défaut:à cela (par exemple):
Ainsi, l'invite par défaut est devenue:
Le 0 entre parenthèses est votre code de sortie, voir:
Pour les significations, voir http://www.tldp.org/LDP/abs/html/exitcodes.html
la source
readlink /proc/$$/exe
s'il vous plaît? 0 signifie aucune erreur, avez-vous essayé quelque chose qui donne une erreur:^C
oufalse
ouasdasdasd
?PS1=$(printf "%s\\\\u@\h:%s%s\w[$?]$%s " "$yellow" "$end" "$blue" "$end")
, mais ça se voit0
tout le temps. Une idée pourquoi?$?
est déjà développé0
lors de la configuration de votrePS1
. Faitesecho $PS1
et vous verrez. Vous devez soit utiliser des guillemets simples, soit y échapper comme\$?
.Une autre façon que j'ai choisie dans Arch Wiki était d'utiliser
trap
:Effet:
la source
Voici un exemple simple:
Si vous utilisez des guillemets doubles, vous devez ajouter une barre oblique inverse pour échapper à
$
:Production:
Une façon encore meilleure consiste à imprimer le code de sortie uniquement lorsqu'il est différent de zéro.
Exemple de sortie:
Explication:
${var#pattern}
est une extension de paramètre bash qui signifie supprimer le modèle de correspondance le plus court à l'avant de $ var. Donc, dans ce cas, nous supprimons0
de l'avant$?
, ce qui tronquerait effectivement un code de sortie de0
.Si vous utilisez des guillemets doubles,
$?
serait substitué lorsquePS1
est défini, au lieu d'être évalué à chaque fois. Faitesecho $PS1
pour confirmer que vous n'avez pas de valeur codée en dur dansPS1
.la source