Se você não tem permissão para alterar seu shell de login, você pode dizer bash (suponho que bash é seu shell de login) para substituir a si mesmo por zsh. No seu ~/.bash_login
, adicione esta linha:
exec /bin/zsh --login
Existe alguma maneira de executar chsh -s /bin/zsh
sem ser root e sem ser solicitada a senha? Eu quero colocá-lo em um script não interativo que não é chamado pelo root.
Se a sua versão de chsh
exigir uma senha (a minha), você precisará configurar o sudo com permissões especiais. Você pode configurá-lo para permitir o acesso a qualquer programa sem solicitar uma senha como esta:
user ALL=(ALL) NOPASSWD:/usr/bin/chsh
Onde "usuário" é seu nome de usuário (ou prefixo com% para um nome de grupo). Certifique-se de especificar o caminho completo para o seu chsh
. Isso não permitirá que o usuário execute qualquer outra coisa como raiz (inclusive de um script), mas permitirá que um binário seja executado como root sem uma senha, evitando assim o prompt de senha do usuário.
Dependendo de suas necessidades exatas, se você quiser fazer isso porque está executando um script longo e não quer que ele fique suspenso no meio da pergunta, é possível solicitar a senha antecipadamente e, em seguida, executar chsh
com sudo
privileges, lendo a senha de stdin
.
read -p 'What is your password?' sudo_password
# rest of the script here
sudo -S chsh -s '/bin/zsh' "${USER}" <<< "${sudo_password}"
-S
faz com que sudo
leia a senha em stdin
. Esteja ciente dos possíveis riscos de segurança com essa abordagem (eu não consegui reproduzir isso, porém, e novamente, dependendo de suas necessidades, isso pode não ser um problema).
Tags users linux shell not-root-user