Jak ustawić Bash jako domyślną powłokę na Ubuntu?

101

Mam .bash_profilew moim katalogu domowym, ale nie można go uruchomić przy logowaniu. Jeśli wykonam następujące czynności, wszystko będzie wyglądać tak, jak się spodziewam:

ssh myhost
bash
source ~/.bash_profile

Ale zwykle wszystko dzieje się po zalogowaniu. Myśli?

James A. Rosen
źródło
3
Upewnij się również, że nie masz ~/.profilelub ~/.bash_login, ponieważ tylko jedna z trzech jest pozyskiwana. (Zapomniałem dokładnej kolejności.)
grawity
3
Dlaczego masz inne pytanie w tytule i inne w treści postu?
pabouk

Odpowiedzi:

170

Posługiwać się:

chsh

Wprowadź hasło i podaj ścieżkę do powłoki, której chcesz użyć.

To byłoby dla Basha /bin/bash. To by było dla Zsha /usr/bin/zsh.

akira
źródło
15
+1 - nie jestem pewien, dlaczego OP zdecydował, że edycja pliku hasła jest lepszym wyborem, ale to najlepsza odpowiedź
kdgregory,
1
Tak, pobiłem mnie, to standardowa metoda.
John T
1
A na Ubuntu ścieżka do powłoki, której chcesz użyć, to ... / bin / bash (i / bin / sh to nie to samo)
Harry Wood
49
Lub możesz użyćsudo chsh -s /bin/bash username
Oleg Waszkiewicz
7
Musisz się wylogować i zalogować ponownie, aby zobaczyć tę zmianę.
Neil Traft
37

Oprócz odpowiedzi Akiry możesz także edytować plik / etc / passwd , aby określić domyślną powłokę.

Znajdziesz wiersz taki jak ten przykład:

john:x:1000:1000:john,,,:/home/john:/bin/sh

Powłoka jest określona na końcu.

John T.
źródło
8
Lepiej użyć polecenia „chsh”, jak sugeruje akira - mniejsza szansa na pomyłkę.
Lars Haugseth,
5
nie wspominając, że „chsh” jest dostępny, gdy nie możesz pisać do / etc / passwd
quack quixote
1
Ale jeśli masz dostęp do modyfikacji /etc/passwdi jesteś ostrożny, odpowiedź Johna dobrze wykorzystuje narzędzia oferowane przez system.
AJP
3
Musisz się wylogować i zalogować ponownie, aby zobaczyć tę zmianę.
Neil Traft
2
Jeśli prowadzisz serwer bez haseł użytkowników - zapewnianie dostępu tylko za pomocą publicznych / prywatnych kluczy ssh ... to również ma sens. chsh wymaga hasła.
Keith John Hutchison,
4

Możesz sprawdzić swój program terminalowy. Może być skonfigurowany do uruchamiania / bin / sh zamiast / bin / bash

Bash wykonuje .bash_profile tylko dla sesji logowania. Plik .bashrc jest wykonywany dla wszystkich sesji bash, nie tylko sesji logowania. Spróbuj pobrać .bash_profile z .bashrc (unikaj cyklicznej zależności!) Lub skonfiguruj swój program terminalowy do uruchamiania / bin / bash -l jako programu powłoki.

Tadeusz A. Kadłubowski
źródło
2
program terminalowy nie ma nic wspólnego z tym problemem, ponieważ to sshd na zdalnej maszynie, który odradza nową powłokę.
akira
2

Jedną z możliwości jest zmiana nazwy skryptu uruchamiania na .profile. Ten plik jest źródłem większości powłok uniksowych .

matematyka
źródło
2

Włącz bash:

$ /bin/bash

Zmień powłokę dla użytkownika:

$ sudo usermod -s /bin/bash username

gdzie:

  -s, --shell SHELL             new login shell for the user account
Umanshield
źródło
2
(1) Co rozumiesz przez „włączanie bash”? (2) Użytkownik chce zmienić własną powłokę logowania w systemie zdalnym. Dlaczego zakładasz, że ma on sudodostęp do tego systemu? Dlaczego podajesz instrukcje dotyczące zmiany powłoki logowania innego użytkownika?
G-Man
Korzystanie z chsh (jak sugerowano powyżej) nie działało dla mnie. To polecenie zrobiło!
Per Lindberg,
1

Aby ustawić dowolną powłokę jako domyślną, najpierw sprawdź, czy jest ona zainstalowana i rozpoznana na twoim komputerze, sprawdzając zawartość /etc/shells:

$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/usr/bin/fish

Następnie użyj, chshaby zmienić powłokę:

$ sudo chsh -s /usr/bin/bash $(whoami) # or sudo chsh -s /bin/bash $(whoami)

Bibliografia

  1. https://linux.die.net/man/1/cat
  2. https://linux.die.net/man/1/whoami
  3. https://linux.die.net/man/5/shells
  4. https://linux.die.net/man/1/chsh
Behrang
źródło
0

W twoim pytaniu nie ma wystarczającej ilości informacji, aby powiedzieć, ale napotkałem już ten sam problem. Zakładając, że już ustawiłeś / bin / bash we wprowadzaniu hasła, może to być sposób uruchamiania terminala.

Jeśli próbujesz uruchomić terminal GUI, powiedz, że gnome-terminalmożesz oczekiwać, że powłoka odczyta twoje pliki startowe bash. Nie dzieje się tak jednak w systemie Ubuntu i być może w innych systemach domyślnie.

Naprawiłem to w Ubuntu, edytując preferencje terminala gnome i ustawiając komendę uruchamiania na bash -l. -ljest skrótem od --login. To mówi bashowi do uruchomienia jako powłoki logowania, co powoduje, że ładuje on skrypty startowe, gdy dostajesz się podczas logowania przez ssh.

Jestem pewien, że jest to uzasadnione, ale jest to zaskakujące i trochę denerwujące, gdy dzielę te same profile w systemach Linux, Cywgin i Macos.

edk750
źródło