Estou usando os computadores da minha escola e gostaria de usá- zsh
los em vez de bash
. Gostaria de torná-lo o shell padrão, mas não consigo executar um comando como $ chsh -s $(which zsh)
porque não tenho privilégios de administrador.
Existe uma maneira de colocar algo no meu .bashrc
ou algo que chama automaticamente zsh
quando é aberto como uma solução alternativa?
Para esclarecer, zsh
já está instalado.
zsh
no.bashrc
arquivo. Logout e login e pronto!zsh
a primeira linha?bash
for chamado explicitamente. Melhor colocá-lo em seu.bash_profile
lugar.Respostas:
Crie
.bash_profile
no seu diretório pessoal e adicione estas linhas:Atualização:
.profile
pode funcionar como uma solução geral quando o shell padrão não é bash. Não tenho certeza se o.profile
Zsh também pode ser chamado de redundante, mas podemos fazer isso com segurança com uma simples verificação:Também podemos usar
which
para obter o caminho dinâmico emzsh
que se baseia o valor de$PATH
:fonte
.bash_profile
não será referenciado. Que tal colocar isso em seu.profile
lugar?.profile
não funcionou. Também não.profile
seria chamado porZsh
? Pode ser redundante. Ainda não verifiquei isso ainda. (Atualização: funcionou agora, não tenho certeza do erro que cometi antes.) Alguma idéia sobre possíveis desvantagens do uso.profile
?.profile
se.bash_profile
não existir (a menos que você o faça manualmente.bash_profile
, é claro). Especificamente, festança fontes o primeiro um dos arquivos [.bash_profile
>.bash_login
>.profile
] que encontra. Ele procura apenas.profile
como um recurso de compatibilidade POSIX (Bourne shell).zsh
..bash_profile
e.profile
não funcionou (os arquivos nem foram executados, o Fedora 26 em um computador universitário).Normalmente você pode usar
chsh
como um usuário não root. Mas é ocasionalmente desativado, geralmente em sites que usam alguma forma de banco de dados de usuários em rede, como NIS e LDAP. Pode haver umypchsh
(NIS) ouchsh.ldap
(LDAP).chsh
também geralmente permite apenas algumas conchas aprovadas , geralmente as listadas em/etc/shells
.Se você não pode usar
chsh
ou suas variantes em seu site, organize seu shell de login paraexec
seu shell favorito e defina aSHELL
variável para apontar para seu shell favorito.Se o seu shell de login for
sh
,dash
ouksh
: o arquivo que você precisa editar é~/.profile
. Tenha em atenção que este arquivo é lido no início de uma sessão interativa e também por alguns scripts de inicialização de sessão não interativos (por exemplo, para sessões X11), portanto, você deve tomar cuidado: apenas chameexec
(que substitui o processo atual) quando o atual shell é interativo. Exceto pelo shell Bourne (o/bin/sh
Solaris 10 e anterior), você pode dizer que um shell é interativo pela presença dei
na lista de opções ($-
).Se você quiser que o zsh leia o seu
.zprofile
, passe a-l
opçãoSe o seu shell de login for
bash
, você pode prosseguir como acima. Como alternativa, você pode colocar esses comandos~/.bash_profile
. A maioria dos scripts de inicialização de sessão apenas lê~/.profile
e não~/.bash_profile
, mas já vi alguns que são executados no bash e no read.bash_profile
, portanto, mesmo assim, você deve tomar cuidado para não chamarexec
um shell não interativo.Se o seu shell de login for csh ou tcsh, consulte um exemplo em Alterando o Shell Padrão sem os privilégios do chsh ou do administrador
fonte
Eu acredito que o comando
chsh
é para esse mesmo propósito. Embora não tenha certeza de que todas as distribuições Linux / Unix suportem isso. Verifique a página do manualchsh
.fonte
passwd -s
.Se você não pode executar
chsh
porque não possui privilégios de administrador, fale com alguém que o faça .Provavelmente você não pode usar
chsh
como não raiz porque o sistema que você está usando está configurado para quechsh
não funcione, por exemplo, porque o sistema usa NIS ou LDAP em vez de apenas o/etc/passwd
arquivo. Ou talvez o administrador do seu sistema só queira manter algum controle.O procedimento para alterar seu shell depende das políticas da sua organização. Pode haver um comando local que faça o que
chsh
normalmente faz. Ou você pode precisar enviar um tíquete de suporte solicitando uma alteração de shell.A maioria das outras respostas é boa, mas se os administradores forem razoavelmente responsivos, talvez você não queira se incomodar em invadir seus scripts de inicialização. Eu provavelmente apenas invocaria
zsh -l
manualmente depois de fazer login até que o administrador atualize minha conta.Outra coisa a ter em mente: às vezes, shell diferentes podem usar os mesmos arquivos de inicialização. Por exemplo,
sh
ebash
tanto pode executar$HOME/.profile
, ecsh
etcsh
tanto pode executar$HOME/.login
e$HOME/.cshrc
(embora os arquivos de inicialização específico do shell como.bashrc
,.bash_profile
e.tcshrc
pode substituir aqueles). Se o seu shell padrão é/bin/csh
e você deseja usar/bin/tcsh
, a atualização de sua.login
chamada/bin/tcsh -l
pode criar um loop infinito.zsh
não executabash
arquivos de inicialização específicos, portanto, isso não é um problema para você.A maioria das conchas definir variáveis que identificam quais a Shell você está executando (
$BASH_VERSION
,$tcsh
,$ZSH_VERSION
). Se você estiver escrevendo um código de inicialização para chamar seu shell preferido, não é uma má idéia incluí-lo em um,if
para que ele seja executado apenas se você ainda não estiver executando esse shell. Usando o código da resposta do konsolebox :(A complicação adicional de verificar, em
"${ZSH_VERSION:-unset}"
vez de apenas"$ZSH_VERSION"
permitir a possibilidade que você fezset -o unset
, uma opção que faz com que uma referência a uma variável indefinida seja um erro.)fonte
Eu posso pensar em alguns cenários.
zsh
não está/etc/shells
ativo e o OP deseja usá-lo sem precisar digitarzsh
no prompt de comando. Soluções possíveis.a) use truques de perfil para executá-lo no login. Isso é tão eficaz quanto alterar o shell.
b) pedir ao administrador para adicionar
zsh
para/etc/shells
que você possachsh
a elec) implore ao administrador para mudar seu shell. isso não é prudente, porque você perderá a capacidade de entrar
ftp
. você só pode usarftp
se tiver um shell/etc/shells
usuário deseja escapar de um shell restrito, provavelmente
rbash
oursh
.Se
.profile
for editável,PATH
pode ser expandido editando-o. Uma vez/bin
no caminho, você pode começarbash
de dentrorsh/rbash
, obtendo acesso aochsh
comando para permitir a troca de conchas. Muitos comandos têm escapes de shell que podem ser usados para escapar de um shell restrito e recuperar o acesso achsh
.chsh
realmente não funciona por algum outro motivo. A solução a partir da possibilidade 1 também é uma resposta aqui.O cenário 2 é o único motivo para realmente alterar o shell padrão (é muito restritivo).
fonte
Eu não acho que a resposta fornecida realmente faça
zsh
o shell padrão. Simplesmente altera o shell para zsh assim que o usuário efetua login no seu shell padrão . O usuário ainda fará o login,DEFAULT SHELL
mas com isso, o shell mudará parazsh
Para alterar o shell padrão, use:
Você deve ser root para fazer isso.
Caso contrário, a solução alternativa acima será útil.
Adicionado a partir do comentário
e pode ser invocado pelo usuário para si mesmo.
fonte
chsh -s /path/to/zsh
é mais padrão e geralmente (mas nem sempre) não requer acesso root, ao contrário dousermod
que sempre exige . Portanto, sua resposta tem mais problemas do que o que a pergunta já indica como não está funcionando.