Modification du comportement de l'invite bash lors du fonctionnement en tant que root

16

Avant de cliquer, ce n'est pas la question typique "comment faire pour que mon invite bash ait une couleur". J'ai déjà personnalisé mon invite bash pour qu'elle ressemble à ceci:

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

où tout entre parenthèses est bleu clair, et tout le reste (y compris $) est noir en ajoutant ce qui suit à 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 transforme en # rouge. J'ai regardé dans /etc/bash.bashrc et / etc / profile pour voir s'il n'y a qu'une ligne à commenter, mais il y a un tas de trucs sur debian_chroot que je ne comprends pas, et je ne veux pas bousiller quelque chose. Comment puis-je accomplir ce que je veux?

PS Voici à quoi je veux que l'invite ressemble en tant que root

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

edit: Marquer cela comme résolu, en ajoutant le code ci-dessus à ~ / .bashrc pendant que root a atteint mon objectif. De plus, dans le code ci-dessus, $ (pwd) n'affiche que le répertoire personnel (je suppose que c'est le répertoire de travail lorsque le terminal est ouvert) et ne se met jamais à jour. Le remplacement de $ (pwd) par \ w corrige cela, mais affiche le répertoire personnel en tant que ~, ce que j'essayais d'éviter.

zmitchell
la source
Utilisez-vous $ pwd ou $ PWD?
belacqua
Il ne réussira pas à encapsuler correctement les lignes car vous n'avez pas dit à bash que vous utilisiez des caractères non imprimables. Insérez des caractères non imprimables, tels que \e[01;31m, dans \[...\]. Ceci est expliqué sous PROMPTING dans le manuel. Voir aussi mywiki.wooledge.org/BashFAQ/053
geirha
La raison pour laquelle cela pwdn'a pas fonctionné dans l'invite est que vous devez échapper au signe dollar, sinon $(pwd)il sera exécuté avant que le contenu ne soit placé dans $ PS1. Vous pouvez le tester avec ceci: PS1="\$(pwd) ".
F-3000

Réponses:

12

Cela dépendra également de la façon dont vous deviendrez l'utilisateur root. Vous devez apporter la modification dans le .bashrc de l'utilisateur root si vous utilisez quelque chose comme su - rootou sudo -i, où vous lisez dans l'environnement.

Avec sudo -s, vous devriez lire votre propre .bashrc.

Pensez à ajouter des instructions printf ou echo pour déboguer votre code, pour vous dire quand il s'est exécuté.

Utilisez la idcommande pour vous assurer que vous êtes bien qui vous pensez être:

root@tau:~# id
uid=0(root) gid=0(root) groups=0(root)
belacqua
la source
J'utilisesudo su
zmitchell
1
sudo sulit ~ root / .bashrc (au moins tel qu'il est actuellement implémenté sur mon système 13.04).
belacqua
3

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

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

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

# Set RED prompt
PS1="\[\e[01;31m\]$PS1\[\e[00m\]"
CJBS
la source
2

Suite à la réponse valide de belacqua /ubuntu//a/305053/12218 , en émettant sudo su, le .bashrc de la racine est chargé.

Vous pouvez vérifier cela en émettant sudo susuivi de cd ~vous verrez que vous êtes dans le répertoire personnel de root.

En sudo suvous connectant en tant que root (su = changer d'utilisateur) contrairement à en
sudo do some administrative tasktant qu'utilisateur avec des privilèges élevés.

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

Stef K
la source
0

Ce qui suit peut aider

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

Cela montrera '> 'pour l'utilisateur normal et '# 'pour root. Cela doit toujours être dans la racine .bashrcaussi.

Petr Gladkikh
la source