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?


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.


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.


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.


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

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

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

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.