Comment puis-je faire en sorte que le shell zsh utilise "$ et #" pour "normal et superutilisateur" au lieu de "% et #"?
3 Réponses :
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". P >
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 .
Vérifiez EUID
(identifiant d'utilisateur effectif) dans ~/.zshrc
:
if [[ $EUID == 0 ]]; then PROMPT='# ' else PROMPT='$ ' fi
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.
L'ajout de ce qui suit à ~ / .zshrc
a fait l'affaire pour moi:
PROMPT='%(!.#.$) '
Il met #
pour root, et $ pour les autres.