Acabei de instalar o zsh no meu sistema Ubuntu. Parece que o zsh não está executando o ~ / .profile no init. Para meu melhor entendimento, esse deve ser um comportamento automático. o que estou perdendo?
.profile
vs. .zprofile
O Zsh é executado ~/.zprofile
, não ~/.profile
, quando é chamado como um shell de login. O motivo é que o zsh possui incompatibilidades suficientes com shells padrão para interromper scripts.
O Zsh é executado ~/.profile
se for chamado como sh
ou ksh
. Mas se seu objetivo é obter um prompt do zsh ao fazer login, isso não ajuda.
Você pode fazer /bin/sh
seu shell de login e incluir export SHELL=/bin/zsh
no seu ~/.profile
. Então, quando você abre um terminal, o terminal inicia o zsh (exceto alguns emuladores de terminal não obedecem à $SHELL
configuração). Mas você ainda terá sh
quando efetuar login no ssh. Isso pode ser remediado incluindo exec zsh
no final de ~/.profile
(isso substitui o shell em execução pelo zsh), mas você deve ter cuidado apenas para fazer isso em logons interativos e não quando ~/.profile
estiver incluído em outros scripts, como o início da sessão X (uma boa test é o nome do processo pai obtido por ps -o comm= $PPID
: se for sshd
or su
, então é seguro exec
).
A solução mais fácil para trabalhar com zsh e run ~/.profile
é criar uma ~/.zprofile
que entre no modo de emulação sh enquanto executa ~/.profile
:
emulate sh
. ~/.profile
emulate zsh
Se você tem um zsh recente o suficiente (no Ubuntu, isso significa que é lúcido, eu acho), você pode simplificar isso para emulate sh -c '. ~/.profile'
.
.zprofile
vs. .zshrc
O arquivo ~/.profile
é carregado por shells de login . O shell de login é o primeiro processo iniciado quando você efetua login no modo de texto, por exemplo, em um console de texto ou via ssh. Por padrão, na maioria das máquinas Linux, o shell de login é bash, mas você pode alterá-lo com o chsh
comando ou através de alguma outra ferramenta, como as "Configurações do Usuário" no Ubuntu. Quando é um shell de login, o bash lê ~/.bash_profile
se existe e ~/.profile
, enquanto o zsh lê apenas ~/.zprofile
(porque sua sintaxe não é totalmente compatível com um sh tradicional). Na maioria das configurações, ~/.profile
também é carregado pelos scripts de inicialização da sessão X quando você efetua login em um gerenciador de exibição gráfica.
Quando você inicia um emulador de terminal e obtém um prompt de shell, ou quando inicia um shell explicitamente, obtém um shell que não é um shell de logon. Como ~/.profile
(ou ~/.zprofile
) é para comandos que você deseja executar quando efetuar login, um shell que não é de login não lê este arquivo. Em vez disso, quando você inicia um zsh interativo, ele lê ~/.zshrc
. (O Zsh lê ~/.zshrc
em todos os shells interativos, sejam eles shells de logon; o bash, estranhamente, nunca lê ~/.bashrc
shells de logon.)
Normalmente, ~/.profile
contém definições de variáveis de ambiente e pode iniciar alguns programas que você deseja executar uma vez ao efetuar login ou durante toda a sessão; ~/.zshrc
contém coisas que devem ser feitas para cada instância do shell, como alias e definições de funções, configurações de opções de shell, configurações de conclusão, configurações de prompt, vinculação de teclas etc.
Resposta curta para pessoas impacientes:
~/.profile
não é carregadozsh
no login.zsh
carrega~/.zprofile
no login.zsh
carrega~/.zshrc
ao iniciar uma nova sessão do terminal.Precisa de mais informações? Veja a excelente resposta de Gilles!
fonte
Além da resposta de Gilles, com uma versão razoavelmente recente do zsh, você pode fazer isso:
... Que fornecerá o arquivo .profile com o modo sh do zsh em vigor. E só está ativo durante a fonte. Portanto, você não precisa salvar o estado atual da opção para reproduzi-lo novamente após a fonte.
fonte
Eu tenho
.zprofile
compatível com.profile
(contém apenas alterações PATH), portanto, apenas necessitando:fonte
O zsh documentação eu tenho na mão apenas menciona
/etc/profile
e~/.profile
para shells de login em sh / ksh modo de compatibilidade.O shell de login no modo nativo (argv [0] começa com
-
) não usa~/.profile
(mas será usado~/.zprofile
):(sem saída)
sh / ksh de compatibilidade conchas modo de login usa .profile:
fonte