Ändern des Verhaltens der Bash-Eingabeaufforderung als Root

15

Bevor Sie wegklicken, ist dies nicht die typische Frage "Wie mache ich meine Bash-Eingabeaufforderung farbig?". Ich habe meine Bash-Eingabeaufforderung bereits so angepasst:

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

Dabei ist alles in Klammern hellblau und alles andere (einschließlich $) schwarz, indem Sie Folgendes zu meiner ~ / .bashrc-Datei hinzufügen

# 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

Das Ziel ist es, es so zu machen, dass sich das einzige, was sich ändert, wenn ich 'sudo su' verwende, ist, dass sich das schwarze $ in ein rotes # verwandelt. Ich habe in /etc/bash.bashrc und / etc / profile nachgesehen, um zu sehen, ob es nur eine Zeile zum Auskommentieren gibt, aber es gibt eine Menge Dinge über debian_chroot, die ich nicht verstehe und die ich nicht will etwas vermasseln. Wie kann ich erreichen, was ich will?

PS So soll die Eingabeaufforderung als root aussehen

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

edit: Markiere dies als gelöst und füge den obigen Code an ~ / .bashrc an, während root mein Ziel erreicht hat. Außerdem zeigt $ (pwd) im obigen Code nur das Home-Verzeichnis an (vermutlich, weil dies das Arbeitsverzeichnis ist, wenn das Terminal geöffnet wird) und aktualisiert es nie. Das Ersetzen von $ (pwd) durch \ w behebt dies, zeigt jedoch das Ausgangsverzeichnis als an ~, das ich vermeiden wollte.

zmitchell
quelle
Verwenden Sie $ pwd oder $ PWD?
Belacqua
Der Zeilenumbruch schlägt fehl, da Sie bash nicht mitgeteilt haben, dass Sie nicht druckbare Zeichen verwenden. Fügen Sie nicht druckbare Zeichen ein, z. B. \e[01;31min \[...\]. Dies wird unter PROMPTING im Handbuch erklärt. Siehe auch mywiki.wooledge.org/BashFAQ/053
geirha
Der Grund, warum pwddie Eingabeaufforderung nicht funktioniert hat, ist, dass Sie das Dollarzeichen umgehen müssen. Andernfalls $(pwd)wird sie ausgeführt, bevor der Inhalt in $ PS1 platziert wird. Sie können es mit diesem Test: PS1="\$(pwd) ".
F-3000,

Antworten:

11

Dies hängt auch davon ab, wie Sie der Root-Benutzer werden. Sie müssen die Änderung in der .bashrc des Root-Benutzers vornehmen, wenn Sie etwas wie su - rootoder verwenden sudo -i, wo Sie in der Umgebung lesen.

Mit sudo -ssollten Sie Ihre eigene .bashrc-Datei lesen.

Erwägen Sie, einige printf- oder echo-Anweisungen hinzuzufügen, um Ihren Code zu debuggen und Ihnen mitzuteilen, wann er ausgeführt wurde.

Verwenden Sie den idBefehl, um sich zu vergewissern, wer Sie sind:

root@tau:~# id
uid=0(root) gid=0(root) groups=0(root)
belacqua
quelle
Ich benutzesudo su
Zmitchell
1
sudo suliest ~ root / .bashrc (zumindest wie aktuell auf meinem 13.04 System implementiert).
Belacqua
3

Um die Farbe der Eingabeaufforderung für root in rot zu ändern, habe ich die .bashrcDatei gemäß den Beispielen in diesem Thread geändert .

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

Suchen Sie dann in vim nach dem endgültigen Erscheinungsbild der PS1Zuordnung und fügen Sie dieses anschließend hinzu (beachten Sie, dass der Wert von aktualisiert wird, $PS1sodass andere vorherige Zeilen nicht geändert werden müssen und die Änderung leicht rückgängig gemacht werden kann):

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

Nach der gültigen Antwort von belacqua /ubuntu//a/305053/12218 wird durch die Ausgabe von sudo su die .bashrc-Datei des Stammverzeichnisses geladen.

Sie können dies überprüfen, indem Sie Folgendes sudo sueingeben: cd ~Sie sehen, dass Sie sich im Stammverzeichnis befinden.

Mit sudo suloggen Sie sich als root ein (su = switch user) im Gegensatz zu
sudo do some administrative taskals user mit erhöhten Rechten.

Wenn sudo suSie also verwenden, werden Sie der eigentliche Root, und die an der Umgebung vorgenommenen Änderungen sind Änderungen, die speziell an Root vorgenommen wurden, dh: sudo sugefolgt von vim .bashrc.

Stef K
quelle
0

Folgendes kann helfen

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

Dies wird '> 'für normale Benutzer und '# 'für root angezeigt. Dies muss auch noch in root sein .bashrc.

Petr Gladkikh
quelle