Como alterno de um shell desconhecido para o bash?

41

Fiquei surpreso por ainda não encontrar essa pergunta no site. Então, hoje $surgiu depois que eu entrei como um novo usuário. Isso foi inesperado porque o prompt do meu usuário principal começa com username@computername:~$.

Então, como alterno desse outro shell para o bash?

mouche
fonte
8
Só porque $surgiu e username@computername:~$não significa que não foi uma festa. A formatação exata do prompt é definida pela variável PS1, que pode ser configurada ou personalizada de maneira diferente para diferentes usuários.
Frabjous
3
@mouche Re: @frabjous echo $SHELLpara descobrir qual é o seu shell atual.
Xenoterracide
11
@mouche @frabjous e começando com um $ é realmente comum para o bash, alguns shells que não são do bash, como o zsh, usam o% fora da caixa, acredito que outros shells usam outras coisas.
Xenoterracide
11
O termo @mouche /bin/shgeralmente não significa muito que geralmente é um link simbólico para outra coisa. Digitei ls -l /bin/shpara ver o que é um link simbólico. Em alguns casos, ser um link simbólico para algo muda seu comportamento, não acho que o bash seja assim.
Xenoterracide
3
@xenoterracide - Usar bashcomo /bin/sh desativa muitos recursos do bash (entra no modo de conformidade com POSIX).
Chris Baixo

Respostas:

61

Supondo que o shell desconhecido suporte a execução de um comando absoluto, você pode tentar: /bin/bash

Para alterar o shell padrão, eu usaria chsh(1). Uso da amostra:chsh -s /bin/bash $USER

Kevin M
fonte
11
O chsh altera permanentemente o shell ou apenas para a sessão atual?
Mouche
10
@mouche Permanentemente; muda sua entrada em/etc/passwd
Michael Mrozek
@mouche, chsh(1)permitirá apenas mudar para um shell listado em /etc/shells(e disponível, presumivelmente). chsh -llista as alternativas. Tenha cuidado, alguns (como nologin) são definidos para contas que nunca devem ser usadas para fazer login (boa maneira de se bloquear), pode haver adições locais para usos especiais.
vonbrand
19

Você digita bash. Se você quiser que isso seja permanente, altere o shell padrão para /bin/bashedição /etc/passwd.

Aqui estão alguns trechos do meu /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

O último campo contém o shell. A modificação do campo após o último :para um shell válido ou inválido funcionará. /bin/falsee /sbin/nologinambos significam que o usuário não possui um shell de login real, embora se o pam não estiver configurado corretamente, isso não significa que eles não podem fazer login (eu relatei um bug sobre isso no Arch Linux, porque você pode fazer login graficamente sem ter um shell de login). /bin/bashe /bin/zshsão ambos shells válidos, consulte /etc/shellsuma lista de shells válidos em seus sistemas. Aqui está o meu, /etc/shellsse você estiver interessado.

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

Sim, você pode usar chshou usermodfazer as mesmas coisas, lembre-se de que estes são apenas arquivos de texto estruturados e TIMTOWTDI.

xenoterracida
fonte
11
Você provavelmente deseja usar em chshvez de editar manualmente #passwd
Michael Mrozek
@ Michael, existem cerca de 5 (POOMA) maneiras diferentes de alterar o shell. /etc/passwdEu não queria listar nenhum deles, porque sempre o faço manualmente. O chsh e o usermod podem fazer isso.
Xenoterracide
Mexer com os arquivos de configuração é uma Bad Idea (TM), um erro pode tornar o sistema inutilizável. Sim, geralmente é a única / mais rápida, mas faça-o com extremo cuidado .
vonbrand 29/02
12

Se chsh ou editar manualmente a configuração não funcionar, mas um script ~ / .profile for executado no login, adicione esta linha:

exec /bin/bash --login
Kevin Cantu
fonte
Depois de olhar em volta por um tempo, essa era a solução que eu precisava. Obrigado!
Pearsonartphoto
Ótima idéia, especialmente se o shell selecionou fontes que arquivam na inicialização ...
vonbrand
touch ~/.bash_profileou, caso contrário, o bash se executará em um loop: o bash ocorre ~/.profilecaso ~/.bash_profilenão exista.
har-wradim