Por que não consigo alterar o shell com o comando chsh?

12

Aprendi um novo comando, pelo menos pensei, porque esse comando chsh:, não se comporta como o descrito.

Foi descrito para funcionar assim:

  1. cat /etc/shells saber quais shells estão instalados, para que você possa escolher entre eles.
  2. faça echo $SHELLpara saber qual shell você está usando.
  3. escolha uma das conchas e digite chsh -s /path/to/shell
  4. digite a senha e verifique com se echo $SHELLvocê está em um novo shell.

Fiz isso e não recebi nenhuma mensagem de erro ao inserir a senha, mas ainda estava no mesmo shell.

% echo $SHELL
/bin/bash
% cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
% chsh -s /bin/sh
Password: 
% echo $SHELL
/bin/bash
tubarão
fonte
5
Você precisa sair e fazer login novamente primeiro.
Rui F Ribeiro
7
Por favor, não poste imagens do texto do terminal. Ele pode ser copiado e colado no corpo da sua pergunta, e realmente não há necessidade de postar imagens, a menos que você esteja mostrando uma falha gráfica ou algo semelhante.
Sergiy Kolodyazhnyy 3/17/17
Editei minha postagem, excluí a imagem e colei o texto, mas a imagem voltou durante a noite.
sharkant 4/17/17
@sharkant Parece que alguém teve uma edição em uma fila de revisão e foi aprovada, o que editou sua postagem após o fato. Eu pensei que o sistema de edição SE não substituiria uma nova edição por uma antiga, mas heh, quem sabe?
Zan Lynx

Respostas:

19

Saia e faça login novamente.

O chshcomando atualizará o /etc/passwdarquivo, mas não altera o shell atual nem o valor da $SHELLvariável no shell atual (não há como fazer isso). Esse é o motivo pelo qual você precisa fazer login novamente; você precisa iniciar uma nova sessão de login para que uma alteração entre em vigor.

Kusalananda
fonte
Não entendo o que é um shell de logon e como sei se estou em um shell de logon ou algum tipo de shell que não é de login. Como inicio uma nova sessão de login?
sharkant 3/17/17
1
@sharkant O ponto é que as informações que você alterou /etc/passwdnão são lidas até que você faça login na próxima vez. Você precisará se desconectar completamente e se conectar novamente para que a alteração entre em vigor. Se você não conseguir fazer isso, a reinicialização da máquina também funcionará.
Kusalananda
1
Eu acho que entendo você desta vez: para que o comando chsh -s / path / to / shell não mude imediatamente o shell em que estou, mas altera uma entrada dentro de / etc / passwd que entrará em vigor quando eu iniciar o shell?
sharkant 3/17/17
@sharkant É exatamente assim que funciona! Estou feliz que finalmente entendi seu equívoco. Vou atualizar a resposta.
Kusalananda
1

Usar o comando utilitário usermod funcionou no meu caso. Rodando no ubuntu 18.04.

  1. Primeiro, verifique o valor atual

grep nameofuser /etc/passwd

  1. mude

sudo usermod --shell /bin/bash nameofuser

  1. Verifique

grep nameofuser /etc/passwd

sandip
fonte