Jak zmienić nieznaną powłokę na bash?

Byłem zaskoczony, że nie znalazłem tego pytania jeszcze w witrynie. Dlatego dzisiaj $ po zalogowaniu się jako nowy użytkownik. Było to nieoczekiwane, ponieważ znak zachęty mojego głównego użytkownika zaczyna się od username@computername:~$.

Jak więc mogę się z tego przełączyć inna powłoka do basha?

Komentarze

  • Tylko dlatego, że pojawił się $, a nie username@computername:~$ nie ' nie oznacza, że nie był ' t bash. Dokładne formatowanie monitu jest ustawiane przez zmienną PS1, którą można skonfigurować lub dostosować w różny sposób dla różnych użytkowników.
  • @mouche Re: @frabjous echo $SHELL aby dowiedzieć się, jaka jest twoja aktualna powłoka.
  • @mouche @frabjous i rozpoczynanie od $ jest w rzeczywistości typowe dla basha, niektóre powłoki nie-bash, takie jak zsh, używają% po wyjęciu z pudełka, uważam, że inne powłoki inne rzeczy.
  • @mouche będąc /bin/sh często nie ' nie znaczy dużo, że ' jest zwykle dowiązaniem symbolicznym do czegoś innego. ' d wpisz ls -l /bin/sh, aby zobaczyć, do czego ' jest dowiązanie symboliczne. W niektórych przypadkach link symboliczny do czegoś zmienia jego zachowanie, nie ' nie sądzę, że bash jest taki.
  • @xenoterracide – Używanie bash as /bin/sh wyłącza wiele funkcji basha (przechodzi w tryb zgodności z POSIX).

Odpowiedź

Zakładając, że nieznana powłoka obsługuje uruchamianie polecenia bezwzględnego, 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

Komentarze

  • Czy chsh na stałe zmienia powłokę, czy tylko dla bieżącej sesji ?
  • @mouche Na stałe; zmienia twój wpis w /etc/passwd
  • @mouche, chsh(1) zezwala tylko na zmianę na wyświetloną powłokę w /etc/shells (i prawdopodobnie jest dostępny). chsh -l zawiera listę alternatyw. Uważaj, niektóre (jak nologin) są zdefiniowane dla kont, które nigdy nie powinny być używane do logowania (dobry sposób na zablokowanie sobie dostępu), mogą istnieć lokalne dodatki do specjalnych zastosowań.

Odpowiedź

Wpisujesz bash. Jeśli chcesz, aby było to trwałe, zmień domyślną powłokę na /bin/bash, edytując /etc/passwd.

Tutaj „s 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 ostatnim : do prawidłowej lub nieprawidłowej powłoki zadziała. /bin/false i /sbin/nologin oznaczają użytkownika nie ma prawdziwej powłoki logowania, chociaż jeśli pam nie jest poprawnie skonfigurowane, nie oznacza to, że nie mogą się zalogować (zgłosiłem błąd w Arch Linux, ponieważ możesz logować się graficznie bez powłoki logowania). /bin/bash i /bin/zsh to poprawne pociski, zobacz /etc/shells, aby uzyskać listę prawidłowych pocisków na Twoje systemy. Oto „moje /etc/shells, jeśli jesteś zainteresowany.

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

Tak, możesz użyć chsh lub usermod, aby zrobić to samo, pamiętaj, że są to tylko ustrukturyzowane pliki tekstowe i TIMTOWTDI.

Komentarze

  • Prawdopodobnie chcesz użyć chsh zamiast ręcznej edycji passwd
  • @Michael istnieje około 5 (POOMA) różnych sposobów zmiany powłoki w /etc/passwd Nie ' nie mam ochoty wymienić żadnego z nich , bo zawsze robię to ręcznie. chsh i usermod mogą to zrobić.
  • Majstrowanie przy plikach konfiguracyjnych to zły pomysł (TM), błąd może spowodować, że system stanie się bezużyteczny. Tak, często jest to jedyny / najszybszy sposób, ale zrób to z najwyższą ostrożnością .

Odpowiedź

Jeśli chsh lub ręczna edycja konfiguracji nie zadziała, ale przy logowaniu wykonywany jest skrypt ~ / .profile, dodaj tę linię:

exec /bin/bash --login 

Komentarze

  • Po chwili rozejrzenia się znalazłem rozwiązanie, którego potrzebowałem. Dzięki!
  • Świetny pomysł, szczególnie jeśli powłoka wybrała ten plik podczas uruchamiania …
  • touch ~/.bash_profile lub w innym przypadku bash wykona się w pętli: bash pobiera ~/.profile w przypadku, gdy ~/.bash_profile nie ' nie istnieje.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *