Jak przełączyć się z nieznanej powłoki na bash?

41

Byłem zaskoczony, że nie znalazłem tego pytania na stronie. Dzisiaj $pojawił się po zalogowaniu jako nowy użytkownik. Było to nieoczekiwane, ponieważ monit mojego głównego użytkownika zaczyna się od username@computername:~$.

Jak mogę przełączyć się z tej innej powłoki na bash?

Mouche
źródło
8
To, że $wymyślił, username@computername:~$nie oznacza, że ​​to nie była walka. Dokładne formatowanie pytania jest ustawiane przez zmienną PS1, którą można skonfigurować lub dostosować w różny sposób dla różnych użytkowników.
frabjous
3
@mouche Re: @frabjous, echo $SHELLaby dowiedzieć się, jaka jest twoja obecna powłoka.
ksenoterrakid
1
@mouche @frabjous i zaczynając od $ jest tak naprawdę wspólne dla bash, niektóre powłoki inne niż bash, takie jak zsh, używają% po wyjęciu z pudełka, myślę, że inne powłoki używają innych rzeczy.
ksenoterrakid
1
@mouche /bin/shczęsto nie znaczy wiele, co zwykle jest dowiązaniem symbolicznym do czegoś innego. Piszę, ls -l /bin/shżeby zobaczyć, do czego to dowiązanie symboliczne. W niektórych przypadkach bycie dowiązaniem symbolicznym do czegoś zmienia jego zachowanie, nie sądzę, że bash jest w ten sposób.
ksenoterrakid
3
@xenoterracide - Używanie bashjako /bin/sh wyłącza wiele funkcji bash (przechodzi w tryb zgodności z POSIX).
Chris Down,

Odpowiedzi:

61

Zakładając, że nieznana powłoka obsługuje uruchamianie bezwzględnych poleceń, możesz spróbować: /bin/bash

Aby zmienić domyślną powłokę, użyłbym chsh(1). Przykładowe użycie:chsh -s /bin/bash $USER

Kevin M.
źródło
1
Czy chsh trwale zmienia powłokę, czy tylko dla bieżącej sesji?
mouche
10
@mouche Permanently; zmienia twój wpis w/etc/passwd
Michael Mrozek
@mouche, chsh(1)pozwoli na zmianę tylko na powłokę wymienioną w /etc/shells(i prawdopodobnie jest dostępna). chsh -lwymienia alternatywy. Uważaj, niektóre (podobne nologin) są zdefiniowane dla kont, których nigdy nie należy używać do logowania (dobry sposób na zablokowanie się), mogą istnieć lokalne dodatki do specjalnych zastosowań.
vonbrand
19

Wpisać bash. Jeśli chcesz, aby była to trwała zmiana domyślnej powłoki /bin/bash, edytując /etc/passwd.

Oto kilka fragmentów z mojego /etc/passwd:

avahi:x:84:84:Avahi daemon:/:/bin/false
xenoterracide:x:1000:100::/home/xenoterracide:/bin/zsh
postgres:x:88:88::/var/lib/postgres:/bin/zsh
bob:x:1001:1001::/home/bob:/bin/bash
usbmux:x:140:140:usbmux user:/:/sbin/nologin

Ostatnie pole zawiera powłokę. Modyfikacja pola po ostatniej :do poprawnej lub niepoprawnej powłoki będzie działać. /bin/falsei /sbin/nologinoba oznaczają, że użytkownik nie ma prawdziwej powłoki logowania, chociaż jeśli pam nie jest poprawnie skonfigurowana, nie oznacza to, że nie może się zalogować (zgłosiłem błąd w Arch Linux, ponieważ możesz zalogować się graficznie bez konieczności powłoka logowania). /bin/bashi /bin/zshoba są poprawnymi powłokami, zobacz /etc/shellslistę prawidłowych powłok w swoich systemach. Oto moje, /etc/shellsjeśli jesteś zainteresowany.

/bin/sh
/bin/bash
/bin/ksh
/bin/zsh
/bin/dash

Tak, możesz używać chshlub usermodrobić te same rzeczy, pamiętaj, że to tylko uporządkowane pliki tekstowe i TIMTOWTDI.

ksenoterracid
źródło
11
Prawdopodobnie chcesz użyć chshzamiast ręcznej edycjipasswd
Michael Mrozek
@Michael istnieje około 5 (POOMA) różnych sposobów na zmianę powłoki. /etc/passwdNie miałem ochoty wymieniać żadnego z nich, ponieważ zawsze robię to ręcznie. chsh i usermod mogą to zrobić.
ksenoterrakid
Bałagan z plikami konfiguracyjnymi to zły pomysł, błąd może uniemożliwić korzystanie z systemu. Tak, często jest to jedyny / najszybszy sposób, ale zrób to z najwyższą ostrożnością .
vonbrand
12

Jeśli chsh lub ręczna edycja konfiguracji nie działa, ale podczas logowania wykonywany jest skrypt ~ / .profile, dodaj ten wiersz:

exec /bin/bash --login
Kevin Cantu
źródło
Po chwili rozejrzenia się, to było rozwiązanie, którego potrzebowałem. Dzięki!
PearsonArtPhoto
Świetny pomysł, zwłaszcza jeśli powłoka wybrała źródła, które
zapisują
touch ~/.bash_profilew przeciwnym razie bash wykona się w pętli: bash bierze ~/.profilena wypadek, gdyby ~/.bash_profilenie istniał.
har-wradim