Como faço para tornar o Bash meu shell padrão no Ubuntu?


101

Eu tenho um .bash_profileno meu diretório pessoal, mas ele não está sendo executado no login. Se eu fizer o seguinte, as coisas parecerão como eu esperava:

ssh myhost
bash
source ~/.bash_profile

Mas normalmente isso tudo acontece no login. Pensamentos?


3
Verifique também se você não tem um ~/.profileou ~/.bash_login, pois apenas um dos três é fornecido. (Eu esqueci a ordem exata.)
grawity

3
Por que você tem uma pergunta diferente no título e outra no corpo da sua postagem?
Pabouk

Respostas:


170

Usar:

chsh

Digite sua senha e indique o caminho para o shell que você deseja usar.

Para Bash, isso seria /bin/bash. Para Zsh, isso seria /usr/bin/zsh.


15
+1 - não tenho certeza por isso que o OP decidiu que editar o arquivo de senhas foi uma escolha melhor, mas esta é a melhor resposta
kdgregory

1
Sim, me derrote, esse é o caminho padrão.
John T

1
E no ubuntu o caminho para o shell que você deseja usar é ... / bin / bash (e / bin / sh não é o mesmo)
Harry Madeira

49
Ou você pode usarsudo chsh -s /bin/bash username
Oleg Vaskevich

7
Você deve sair e fazer login novamente para ver esta alteração.
Neil Traft

37

Além da resposta da akira, você também pode editar seu arquivo / etc / passwd para especificar seu shell padrão.

Você encontrará uma linha como este exemplo:

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

O shell é especificado no final.


8
Melhor usar o comando 'chsh' como sugerido por akira - menos chance de estragar algo por engano.
Lars Haugseth,

5
para não mencionar 'chsh' está disponível quando você não pode escrever em / etc / passwd
quack quixote

1
Mas se você tem acesso à modificação /etc/passwde é cuidadoso, a resposta de John é fazer bom uso das ferramentas que o sistema fornece.
AJP

3
Você deve sair e fazer login novamente para ver esta alteração.
Neil Traft

2
Se você estiver executando um servidor sem senhas de usuário - fornecendo acesso apenas através de chaves ssh públicas / privadas ... isso também faz muito sentido. O chsh requer uma senha.
Keith John Hutchison

4

Você pode verificar o seu programa de terminal. Pode ser configurado para executar / bin / sh em vez de / bin / bash

O Bash executa .bash_profile apenas para sessões de logon. .bashrc é executado para todas as sessões do bash, não apenas para as sessões de login. Tente procurar .bash_profile no .bashrc (evite dependência circular!) Ou configure o programa do terminal para executar / bin / bash -l como um programa shell.


2
O programa terminal não tem nada a ver com o problema, porque é o sshd na máquina remota que gera o novo shell.
26413 akira

2

Uma alternativa é renomear seu script de inicialização para .profile. Este arquivo está sendo fonte pela maioria dos shells do Unix .


2

Ativar bash:

$ /bin/bash

Alterar shell para o usuário:

$ sudo usermod -s /bin/bash username

Onde:

  -s, --shell SHELL             new login shell for the user account

2
(1) O que você quer dizer com "ativar bash"? (2) O usuário deseja alterar seu próprio shell de login em um sistema remoto. Por que você acha que ele tem sudoacesso nesse sistema? Por que você fornece instruções em termos de alteração do shell de login de outro usuário?
G-Man

Usar chsh (como sugerido acima) não funcionou para mim. Este comando fez!
Por Lindberg

1

Para tornar qualquer shell o seu padrão, verifique primeiro se ele está instalado e reconhecido no seu computador, observando o conteúdo de /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

Em seguida, use chshpara alterar seu shell:

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

Referências

  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

Não há informações suficientes em sua pergunta para que eu tenha certeza, mas já encontrei o mesmo problema antes. Supondo que você já tenha o / bin / bash definido na sua entrada de senha, pode ser a maneira como o seu terminal é iniciado.

Se você estiver tentando iniciar um terminal da GUI, diga gnome-terminalque pode estar esperando que o shell leia seus arquivos de inicialização do bash. No entanto, isso não acontece no Ubuntu e talvez em outros sistemas por padrão.

A maneira como eu o consertei no Ubuntu é editar as preferências do gnome-terminal e definir o comando de inicialização para ser bash -l. -lé a abreviação de --login. Isso informa ao bash para inicializar como um shell de logon, o que faz com que ele carregue os scripts de inicialização que você obtém ao efetuar login via ssh.

Tenho certeza de que há uma boa justificativa para que seja assim, mas achei surpreendente e um pouco irritante, pois compartilho os mesmos perfis nos sistemas linux, cywgin e macos.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.