Modifica del comportamento del prompt di bash quando funziona come root


16

Prima di fare clic, questa non è la tipica domanda "come posso fare in modo che il mio prompt di bash abbia il colore". Ho già personalizzato il mio prompt di bash in questo modo:

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

dove tutto tra parentesi è azzurro e tutto il resto (incluso $) è nero aggiungendo quanto segue al mio file ~ / .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

L'obiettivo è renderlo tale che l'unica cosa che cambia quando uso "sudo su" è che il $ nero si trasforma in un # rosso. Ho guardato in /etc/bash.bashrc e / etc / profile per vedere se c'è solo una riga per commentare, ma ci sono un sacco di cose su debian_chroot che non capisco, e non voglio per rovinare qualcosa. Come posso realizzare quello che voglio?

PS Questo è quello che voglio che il prompt assomigli a root

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

modifica: Contrassegna questo risolto, aggiungendo il codice sopra a ~ / .bashrc mentre root ha raggiunto il mio obiettivo. Inoltre, nel codice sopra, $ (pwd) visualizza solo la home directory (suppongo perché quella è la directory di lavoro quando il terminale è aperto) e non si aggiorna mai. La sostituzione di $ (pwd) con \ w risolve questo problema, ma visualizza la directory home come ~, che stavo cercando di evitare.


Stai usando $ pwd o $ PWD?
belacqua,

Non riuscirà a avvolgere le linee correttamente poiché non hai detto a bash che stavi usando caratteri non stampabili. Racchiudere caratteri non stampabili, ad esempio \e[01;31m, in \[...\]. Questo è spiegato sotto PROMPTING nel manuale. Vedi anche mywiki.wooledge.org/BashFAQ/053
geirha

Il motivo per cui pwdnon ha funzionato nel prompt è che è necessario sfuggire al simbolo del dollaro, altrimenti $(pwd)verrà eseguito prima che il contenuto venga inserito in $ PS1. Puoi provarlo con questo: PS1="\$(pwd) " .
F-3000,

Risposte:


12

Dipenderà anche da come diventerai l'utente root. È necessario apportare la modifica nel .bashrc dell'utente root se si utilizza qualcosa di simile su - rooto sudo -i, dove si legge nell'ambiente.

Con sudo -s, dovresti leggere il tuo .bashrc.

Prendi in considerazione l'aggiunta di alcune istruzioni printf o echo per eseguire il debug del codice, per comunicarti quando è stato eseguito.

Usa il id comando per assicurarti di essere quello che pensi di essere:

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

Sto usandosudo su
zmitchell il

1
sudo sulegge ~ root / .bashrc (almeno come attualmente implementato sul mio sistema 13.04).
belacqua,

3

Per cambiare il colore del prompt in rosso per root, ho modificato il .bashrcfile, seguendo gli esempi in questo thread.

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

Quindi, in vim, cerca l'aspetto finale PS1dell'assegnazione e aggiungi questo dopo di esso (nota che aggiorna il valore di $PS1così che non è necessario modificare altre righe precedenti e che la modifica è facilmente riverificabile):

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

2

Seguendo la risposta valida di belacqua /ubuntu//a/305053/12218 , sudo su .bashrc del root viene caricato.

Puoi verificarlo emettendo sudo su seguito da cd ~vedrai che sei nella home directory di root.

Usando sudo suaccedi come root (su = switch user) in contrasto con
sudo do some administrative task come utente con privilegi elevati.

Quindi, usando sudo susi diventa la radice effettiva e le modifiche apportate all'ambiente sono modifiche apportate specificamente alla radice, ovvero: sudo suseguite da vim .bashrc.


0

Di seguito può aiutare

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

Questo mostrerà '> 'per l'utente normale e '# 'per root. Anche questo ha bisogno di essere nella radice .bashrc.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.