Jestem na CentOS 6.4. Domyślnie monit użytkownika root ma #
symbol, tzn. Wygląda mniej więcej tak [root@myserver ~]#
.
echo $PS1
drukuje [\u@\h \W]\$
; ale jeśli robię PS1="[\u@\h \W]\$"
(który nie powinien nic zmieniać, afaics), I skończyć z wiersza, który wygląda tak: [root@myserver ~]$
.
Dlaczego, kiedy próbuję to ustawić sam (ostatecznie chciałbym to zmienić na coś bardziej użytecznego), czy interpretuje to $
dosłownie? Prawie każda strona, którą mogę znaleźć (np. Porady: zmiana / konfiguracja niestandardowego monitu bash (PS1) ) mówi, że \$
powinno to dać #
użytkownikowi root.
PS1=[\u@\h \W]\$
zwraca-bash: W]$: command not found
.PS1="[\u@\h \W]\$"
.Odpowiedzi:
W swoim pytaniu sugerujesz, że wcale nie cytujesz linii; to jest oczywiście błędne, ponieważ wówczas spacja oddzieliłaby przypisanie argumentu „PS1 = [\ u @ \ h” od polecenia „\ W] \ $”. Pamiętaj, że każda postać jest ważna.
W każdym razie to, co prawdopodobnie robisz, to używanie podwójnych cudzysłowów („) zamiast pojedynczych ('). Zachowują się bardzo różnie, jeśli chodzi o powłokę interpretującą to, co wpisałeś. W przypadku podwójnych cudzysłowów spróbuje robić sprytne rzeczy za pomocą sekwencje odwrotnego ukośnika / jakiegoś znaku. W przypadku tego przypisania, ponieważ nie ma nic specjalnego w \ u, \ hi \ W, są one nietknięte; nawiasy kwadratowe mogą mieć specjalne znaczenie w różnych miejscach, ale nie w tym przypadku, więc są one również pozostawione na miejscu, ale ponieważ
$
ma wiele znaczeń, wszystkie są wyjątkowe,\$
sekwencja jest interpretowana jako „zignoruj specjalność znaku dolara i po prostu zostaw ją tam”, a sekwencja ta zostanie zastąpiona przez pojedynczy znak dolara bez dalszego analizowania. Wynik tego wszystkiego jest przypisany doPS1
, a ponieważ istnieje dosłowny znak dolara, a nie magiczna\$
sekwencja, gdy powłoka konstruuje rzeczywistą podpowiedź, otrzymujesz po prostu znak dolara, a nie postać zależną od efektywnego użytkownika. Rzeczywiste parsowanie jest nieco bardziej skomplikowane, ale to jest sedno tego w tym konkretnym przykładzie.Co wpisałeś:
PS1="[\u@\h \W]\$ "
Co przypisała powłoka:
PS1 <- "[\u@\h \W]$ "
Co chciałeś:
PS1 <- "[\u@\h \W]\$ "
Co powinieneś wpisać:
PS1='[\u@\h \W]\$ '
Co należy zrobić dalej: Przeczytaj coś w tym samouczku, aby dowiedzieć się więcej o cytowaniu powłoki.
źródło
PS1="...\\\$"
w celu zapewnienia, że dosłowna para\$
jest przechowywany wPS1
dla powłoki interpretować później.Czy włączony do użytkownika root za pomocą
sudo su
,su
lub po zalogowaniu się jako root? Służyid
do sprawdzania, kogo komputer uważa za zalogowanego, ponieważ może to wpłynąć na profil, który faktycznie edytujesz.Sprawdź odpowiedzi na /ubuntu/305052/changing-behavior-of-bash-prompt-when-functioning-as-root
źródło