Je veux que mon invite affiche l'état de sortie de la dernière commande, j'ai donc défini ma PS1 sur ceci :

PS1="$? > "

Mais il affiche toujours 0 >.
Même lorsque j'exécute false, par exemple, l'invite n'imprime pas 1 > ou quel que soit l'état de sortie.

Pourquoi cela se produit-il?

ÉDITER:

J'ai essayé d'utiliser une fonction pour définir mon invite, en testant si l'état de sortie était supérieur à 0, de sorte qu'il n'imprimera pas toujours 0 >, uniquement lorsque l'état de sortie est différent de zéro.

 promptcmd() {
    _EXIT=$?
    test $_EXIT -gt 0  && printf "\e[1;31m [$_EXIT]"
    printf "\e[0m ❯ "
    unset _EXIT
 }

 PS1="$(promptcmd)"

Mais cela ne fonctionne pas non plus.

1
Seninha 12 févr. 2020 à 15:18

1 réponse

Meilleure réponse

$? a été développé lorsque vous avez défini PS1, car vous avez utilisé des guillemets doubles.

Vous pouvez utiliser des guillemets simples pour différer l'expansion jusqu'à ce que PS1 s'affiche :

PS1='$? > '

Ce type de "double expansion" n'est pas une propriété des paramètres en général, mais le résultat de la façon dont le shell utilise la valeur de PS1. echo "$PS1" affichera toujours la chaîne littérale $? >, mais lorsque le shell affichera l'invite, il développera toutes les extensions de paramètres trouvées dans la valeur.

1
chepner 12 févr. 2020 à 12:41