Zmiana zachowania monitu bash podczas działania jako root

16

Zanim klikniesz, nie jest to typowe pytanie „jak sprawić, aby mój bash miał kolor”. Już dostosowałem mój monit bash, aby wyglądał następująco:

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

gdzie wszystko w nawiasach jest jasnoniebieskie, a wszystko inne (w tym $) jest czarne, dodając następujące elementy do mojego pliku ~ / .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

Celem jest, aby jedyną rzeczą, która zmienia się, gdy używam „sudo su”, jest to, że czarne $ zmienia się w czerwony #. Zajrzałem do /etc/bash.bashrc i / etc / profile, aby sprawdzić, czy jest tylko linia do skomentowania, ale jest wiele rzeczy na temat debian_chroot, których nie rozumiem i nie chcę coś spieprzyć. Jak mogę osiągnąć to, czego chcę?

PS Tak chcę, aby monit wyglądał jak root

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

edycja: Oznacz to jako rozwiązane, dołączając powyższy kod do ~ / .bashrc, podczas gdy root osiągnął mój cel. Ponadto w powyższym kodzie $ (pwd) wyświetla tylko katalog domowy (chyba dlatego, że jest to katalog roboczy, gdy terminal jest otwarty) i nigdy nie jest aktualizowany. Zamiana $ (pwd) na \ w naprawia to, ale wyświetla katalog domowy jako ~, którego próbowałem uniknąć.

zmitchell
źródło
Czy używasz $ pwd lub $ PWD?
belacqua
Nie uda się poprawnie zawinąć wierszy, ponieważ nie powiedziałeś bashowi, że używasz znaków niedrukowalnych. Dołącz znaki niedrukowalne, takie jak \e[01;31m, w \[...\]. Wyjaśniono to w części PROPOZYCJA w instrukcji. Zobacz także mywiki.wooledge.org/BashFAQ/053
geirha
Powodem, dla którego pwdnie zadziałało w wierszu polecenia, jest to, że musisz uciec od znaku dolara, w przeciwnym razie $(pwd)zostanie wykonane przed umieszczeniem zawartości w $ PS1. Można przetestować go w ten sposób: PS1="\$(pwd) ".
F-3000

Odpowiedzi:

12

Będzie to również zależeć od tego, jak zostaniesz użytkownikiem root. Musisz zmienić .bashrc użytkownika root, jeśli używasz czegoś takiego jak su - rootlub sudo -i, gdy czytasz w środowisku.

Z sudo -spowinieneś czytać własny .bashrc.

Zastanów się nad dodaniem instrukcji printf lub echo w celu debugowania kodu i poinformowania go o jego wykonaniu.

Użyj idpolecenia, aby upewnić się, że jesteś tym, za kogo się uważasz:

root@tau:~# id
uid=0(root) gid=0(root) groups=0(root)
Belacqua
źródło
Używamsudo su
zmitchell
1
sudo suczyta ~ root / .bashrc (przynajmniej jak obecnie zaimplementowany w moim systemie 13.04).
belacqua
3

Aby zmienić kolor monitu na czerwony dla roota, zmodyfikowałem .bashrcplik, postępując zgodnie z przykładami w tym wątku.

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

Następnie, w vimie, wyszukaj ostateczny wygląd PS1zadania i dodaj to po nim (zauważ, że aktualizuje wartość $PS1, aby inne poprzednie wiersze nie musiały być modyfikowane, a zmiana jest łatwo odwracalna):

# Set RED prompt
PS1="\[\e[01;31m\]$PS1\[\e[00m\]"
CJBS
źródło
2

Po prawidłowej odpowiedzi belacqua /ubuntu//a/305053/12218 , wydając sudo su, ładowany jest plik root .bashrc.

Możesz to sprawdzić, wydając, sudo sua następnie cd ~zobaczysz, że znajdujesz się w katalogu głównym root.

Używając sudo sulogujesz się jako root (su = switch user) w przeciwieństwie do tego,
sudo do some administrative taskjako użytkownik z podwyższonymi uprawnieniami.

Tak więc, używając sudo su, stajesz się prawdziwym rootem, a zmiany dokonane w środowisku są zmianami dokonanymi specjalnie dla roota, tj .: sudo sunastępuje vim .bashrc.

Stef K.
źródło
0

Następujące mogą pomóc

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

To pokaże się '> 'dla zwykłego użytkownika i '# 'roota. To wciąż musi znajdować się w katalogu głównym .bashrc.

Petr Gladkikh
źródło
Podobną rzecz można osiągnąć za pomocą, \$która pokazuje, #czy root i $inaczej. \$nie jest jednak bardzo przydatny, ponieważ nie można go dostosowywać.
Captain Man