1
votes

Personnaliser l'invite zsh pour normal / superutilisateur?

Comment puis-je faire en sorte que le shell zsh utilise "$ et #" pour "normal et superutilisateur" au lieu de "% et #"?


0 commentaires

3 Réponses :


0
votes

La réponse automatique actuellement supprimée est correcte, pour autant qu'elle disparaisse. Dans une invite, % (!. #. $) se développera en # si l'ID utilisateur effectif du shell est 0, $ sinon .

Cependant, sachez que si votre invite actuelle est quelque chose comme PS1 = '% (!. #. $)' , le simple démarrage d'un shell privilégié peut ne pas conserver la valeur actuelle de PS1 , même si exporté. Par exemple, sous macOS, le fichier par défaut / etc / zshrc définit explicitement la valeur de PS1 , en supprimant toute valeur que vous auriez pu espérer être "héritée".

Cela dit, je recommande de ne pas utiliser $ dans l'invite, car il est fortement associé aux descendants Bourne-shell qui ne s'écartent pas tellement du comportement interactif standard. zsh fournit un grand nombre de fonctionnalités conçues explicitement pour (et en conflit avec une utilisation interactive standard), donc une invite % fournit un bon rappel de cela .


0 commentaires

0
votes

Vérifiez EUID (identifiant d'utilisateur effectif) dans ~/.zshrc :

if [[ $EUID == 0 ]]; then
    PROMPT='# '
else
    PROMPT='$ '
fi


6 commentaires

La seule différence entre cela et l'échappement d'invite conditionnel existant est que vous vérifiez l'ID utilisateur réel plutôt que l'ID utilisateur effectif.


Cela ne changera pas l'invite si l'EUID change pendant que la session est active.


Eh bien, vérifiez alors $ EUID . Quoi qu'il en soit, j'utilise le même ~ / .zshrc pour root et pour l'utilisateur normal. Alors j'écris juste comme ça.


@chepner, dans mon ~ / .zshrc , il change également de couleur (rouge pour root ); donc je dois vraiment vérifier l ' UID en utilisant if ... then ... else . Simplement PS1 = '% (!. #. $)' ne me suffit pas. Donc je pense que c'est peut-être si ... alors ... est ce que veut sramji. Au fait, je ne sais pas comment une session zsh peut changer le EUID en cours d'exécution.


Si vous commencez en tant que root, vous pouvez supprimer les privilèges en les attribuant directement à EUID .


@chepner, oui! En effet! Je ne savais pas que la "commande" EUID = 1000 modifiait l'uid effectif directement dans le script. Merci. J'ai mis à jour l'EUID.



1
votes

L'ajout de ce qui suit à ~ / .zshrc a fait l'affaire pour moi:

PROMPT='%(!.#.$) '

Il met # pour root, et $ pour les autres.


0 commentaires