web-dev-qa-db-fra.com

Changer le comportement de bash Prompt en fonctionnant en tant que root

Avant de cliquer, ce n’est pas la question typique "Comment puis-je créer une invite de couleur?". J'ai déjà personnalisé mon invite bash pour qu'il ressemble à ceci:

[user @ Host]----[$(pwd)]
$ 

où tout ce qui est entre parenthèses est bleu clair et tout le reste (y compris $) est noir en ajoutant ce qui suit dans mon fichier ~/.bashrc

# Turn the Prompt symbol red if the user is root
if [ $(id -u) -eq 0 ];
then # you are root, make the Prompt red
    PS1="[\e[01;34m\u @ \h\e[00m]----[\e[01;34m$(pwd)\e[00m]\n\e[01;31m#\e[00m "
else
    PS1="[\e[01;34m\u @ \h\e[00m]----[\e[01;34m$(pwd)\e[00m]\n$ "
fi

Le but est de faire en sorte que la seule chose qui change lorsque j'utilise 'Sudo su' est que le $ noir se change en un # rouge. J'ai regardé dans /etc/bash.bashrc et/etc/profile pour voir s'il y a juste une ligne à commenter, mais il y a un tas de choses sur debian_chroot que je ne comprends pas, et je ne veux pas bousiller quelque chose. Comment puis-je accomplir ce que je veux?

P.S. C’est ce que je veux que l’invite ressemble à la racine

[user @ Host]----[$(pwd)]
(red)#

edit: Marquez ceci comme résolu, en ajoutant le code ci-dessus à ~/.bashrc pendant que root atteignait mon objectif. De plus, dans le code ci-dessus, $ (pwd) affiche uniquement le répertoire de base (car je suppose que c'est le répertoire de travail à l'ouverture du terminal) et ne se met jamais à jour. Remplacer $ (pwd) par\w résout ce problème, mais affiche le répertoire de base sous la forme ~, ce que j'essayais d'éviter.

14
zmitchell

Cela dépendra également de la manière dont vous deviendrez l'utilisateur root. Vous devez modifier le fichier .bashrc de l'utilisateur root si vous utilisez quelque chose comme su - root ou Sudo -i, dans lequel vous lisez l'environnement.

Avec Sudo -s, vous devriez lire votre propre fichier .bashrc.

Pensez à ajouter des instructions printf ou echo pour déboguer votre code, afin de vous informer de son exécution.

Utilisez la commande id pour vous assurer d'être ce que vous pensez être:

root@tau:~# id
uid=0(root) gid=0(root) groups=0(root)
11
belacqua

Pour changer la couleur de l'invite en rouge pour root, j'ai modifié le fichier .bashrc, en suivant les exemples de ce fil.

regularuser@myubuntubox:~$ Sudo su - 
root@myubuntubox:~# vim .bashrc

Ensuite, dans vim, recherchez l'apparence finale de l'attribution PS1 et ajoutez-la après (notez qu'elle met à jour la valeur de $PS1 de sorte que les autres lignes précédentes n'ont pas besoin d'être modifiées et que la modification soit facilement réversible):

# Set RED Prompt
PS1="\[\e[01;31m\]$PS1\[\e[00m\]"
3
CJBS

Suite à la réponse valide de belacqua https://askubuntu.com/a/305053/12218 , en émettant Sudo su, le fichier .bashrc de la racine est chargé.

Vous pouvez vérifier cela en émettant Sudo su suivi de cd ~, vous verrez que vous vous trouvez dans le répertoire de base de la racine.

En utilisant Sudo su vous vous connectez en tant que root (su = changer d'utilisateur) contrairement à
Sudo do some administrative task en tant qu'utilisateur disposant de privilèges élevés.

Ainsi, en utilisant Sudo su, vous devenez la racine réelle et les modifications apportées à l'environnement sont des modifications apportées spécifiquement à root, c'est-à-dire: Sudo su suivi de vim .bashrc.

2
Stef K

Suivre peut aider

export PS1='`[ $(id -u) == "0" ] && echo "#" || echo ">"` '

Ceci affichera '> ' pour l'utilisateur normal et '# ' pour root. Cela doit encore être dans le .bashrc de la racine aussi.

0
Petr Gladkikh