Dlaczego mój monit w systemie Linux pokazuje $ zamiast nazwy i ścieżki logowania?

13

Na jednym z moich serwerów pojawia się monit [użytkownik @ ścieżka hosta] ... i mogę wcisnąć „tab”, aby automatycznie wypełnić ścieżkę.

Ale na moim nowym serwerze Ubuntu jest to tylko znak dolara?

Alex
źródło
1
Zawsze możesz wpisać, pwdaby wydrukować nazwę bieżącego katalogu roboczego. I czy mówisz, że Tab-uzupełnianie też nie działa? (Na niektórych komputerach, których używam, ten krótki monit pojawia się tylko wtedy, gdy loguję się jako root i z przyjemnością zostawiam to miejsce jako miłe ostrzeżenie. Ponieważ rzadko, jeśli w ogóle, trzeba się zalogować jako root: nie używasz roota , jesteś?)
Arjan
Alex, możesz nam powiedzieć, jakiej dystrybucji używasz?
inwertowanie
Używam Ubuntu.
Alex
Najnowsze Ubuntu? I czy mówisz, że Tab-uzupełnianie też nie działa?
Arjan
Wygląda na to, że zadajesz dwa pytania: dlaczego karta nie wypełnia automatycznie ścieżki i dlaczego monit jest tylko znakiem dolara zamiast [użytkownik @ ścieżka hosta]. Głosowanie na odpowiedzi jest trochę trudne, ponieważ żadna z odpowiedzi nie jest jednoznaczna.
Joseph Holsten

Odpowiedzi:

27

Ponieważ zadajesz dwa pytania, odpowiem na oba.

Dlaczego tabulatory nie uzupełniają ścieżek plików?

Ponieważ powłoka albo go nie obsługuje, albo uzupełnianie tabulatorów nie jest włączone.

Aby rozwiązać ten problem, najpierw musisz dowiedzieć się, jaka jest twoja powłoka. Na maszynie, której powłokę lubisz, uruchom

echo $SHELL

Możesz zobaczyć /bin/bashcoś wspólnego , coś mniej powszechnego /bin/tcsh, /bin/zshlub coś zupełnie innego.

Teraz możesz zmienić powłokę na maszynie Ubuntu. Na tym komputerze najpierw upewnij się, że żądana powłoka istnieje. Ponieważ powłoka może nie znajdować się w tym samym miejscu na komputerze Ubuntu, co na drugim, sprawdź lokalizację, wpisując

 which bash

To daje ścieżkę skorupy chcesz, coś podobnego /bin/bash, /usr/bin/bashalbo /usr/local/bin/bash. Oczywiście, jeśli chcesz powłoki innej niż bash, powiesz which tcsh, which zshlub podobny.

Jeśli nie widzisz ścieżki, ale widzisz bash not found, musisz zainstalować odpowiedni pakiet i ponownie użyć, whichaby dowiedzieć się, gdzie została zainstalowana powłoka.

Ścieżką wybranej powłoki możesz w końcu zmienić powłokę, uruchamiając

chsh -s /bin/bash

zastępując /bin/bashdowolną odpowiednią ścieżką dla wybranej powłoki.

Dlaczego podpowiedź to znak dolara zamiast [użytkownik @ ścieżka hosta]?

Ze względu na szybką zmiennych środowiskowych $PS1, $PS2i tak dalej. Te rzeczy nie są zwykle przenośne między powłokami, więc oto kilka linków dla prawdopodobnych kandydatów:

bashma obszerny podręcznik ze stronami na temat zmiennych Bash (w tym PS1& c) i drukowania monitu (który opisuje PROMPT_COMMANDdługą nazwę dla PS1). Dodaj następujący wiersz do swojego~/.bashrc

export PS1='[\u@\h \w] '

tcshma podręcznik online (tylko jego stronę man) z sekcją dotyczącą zmiennych środowiskowych pytania . Dodaj następujący wiersz do swojego~/.tcshrc

set prompt='[%n@%m %~] '

zshma instrukcję obsługi z prostym przewodnikiem po podpowiedziach , a także instrukcję z bardzo szczegółowym opisem rozszerzenia Prompt Expansion . Dodaj następujący wiersz do swojego~/.zshrc

export PS1='[%n@%m %~] '
Joseph Holsten
źródło
6

Bash nie jest jedyną powłoką.

Twój problem może polegać na tym, że nie masz pliku .profile lub .bashrc, który ustawia PS1, lub może być tak, że twoja powłoka logowania wcale nie jest bash.

Bash używa gnu readlinedo takich rzeczy jak uzupełnianie tabulatorów. Jest to skomplikowany temat, a readline ma nawet własny plik konfiguracyjny dla użytkownika.

Zobacz man bash, man shoraz man 3 readline. Bash odpowiada na --version. Na wielu systemach Linux /bin/shnie jest tak naprawdę bashem, ale zwykle okaleczoną wersją ash.

DigitalRoss
źródło
1
nie dashzamiast ash? myślałem, że przeczytałem coś takiego
knittl
2
+1 za brak posiadania .profile lub .bashrc - chyba że Alex początkowo założył swoje konto podczas instalacji Ubuntu, wówczas domyślnie nowi użytkownicy nie mają .bashrc / nie mają PS1.
Cory Plastek
4

myślę, że nie używasz bash, ale sh i twój monit nie jest ustawiony poprawnie (jeśli jest to możliwe nawet z sh).

możesz uzyskać aktualną powłokę, wpisując: echo $SHELL

jeśli chcesz rozpocząć bash, po prostu wpisz bash

knittl
źródło
Możesz ustawić monit za pomocą innych powłok. Nie ma żadnej powłoki o nazwie sh. Echoing $SHELLwypisze zmienną środowiskową o nazwie SHELL. Ta zmienna środowiskowa po prostu wskazuje powłokę i jest ustawiana tylko przez bash. Jest w przybliżeniu bezużyteczny przy ustalaniu, która powłoka jest uruchomiona, ponieważ słabo wskazuje tylko, że niektóre elementy nadrzędne bieżącego procesu mogły być bash.
DigitalRoss,
nazwa programu powłoki to sh (w / bin / sh). i tak, echo $ SHELL wypisze zmienną SHELL, która jest zwykle ustawiona.
knittl
Każdy system uniksowy ma plik wykonywalny o nazwie /bin/shtak. Ale nie znam żadnej powłoki o nazwie sh. Mogę myśleć ash, ksh, csh, bash, zsh, i tcsh. Pierwszy to zwykły / bin / sh na Linuksie i NetBSD, ostatni to zwykła powłoka FreeBSD, a pozostałe to opcjonalne powłoki. Wiele środowisk pulpitu zmienia powłokę logowania użytkownika na bash, pozostawiając / bin / sh jako ash.
DigitalRoss,
2
@DigitalRoss shjest powłoką Bourne'a. en.wikipedia.org/wiki/Bourne_shell Niektóre systemy (Solaris) wciąż zawierają wersję powłoki Bourne'a, która nie jest tylko kopią jednej z re-implementacji (ash, dash, bash, ksh, zsh).
Chris Johnsen,
... a bash jest znany jako „Powłoka Bourne'a”, która odziedziczyła niektóre cechy powłoki Bourne'a, csh i ksh.
inwertowanie