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