Respostas:
.profile vs. .zprofileO 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 ~/.profilese for chamado como shou ksh. Mas se seu objetivo é obter um prompt do zsh ao fazer login, isso não ajuda.
Você pode fazer /bin/shseu shell de login e incluir export SHELL=/bin/zshno seu ~/.profile. Então, quando você abre um terminal, o terminal inicia o zsh (exceto alguns emuladores de terminal não obedecem à $SHELLconfiguração). Mas você ainda terá shquando efetuar login no ssh. Isso pode ser remediado incluindo exec zshno 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 ~/.profileestiver 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 sshdor su, então é seguro exec).
A solução mais fácil para trabalhar com zsh e run ~/.profileé criar uma ~/.zprofileque 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. .zshrcO 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 chshcomando 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_profilese 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, ~/.profiletambé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ê ~/.zshrcem todos os shells interativos, sejam eles shells de logon; o bash, estranhamente, nunca lê ~/.bashrcshells de logon.)
Normalmente, ~/.profileconté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; ~/.zshrcconté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.
~/.profilenão é carregado zshno login.zshcarrega ~/.zprofileno login.zshcarrega ~/.zshrcao iniciar uma nova sessão do terminal.Precisa de mais informações? Veja a excelente resposta de Gilles!
Além da resposta de Gilles, com uma versão razoavelmente recente do zsh, você pode fazer isso:
[[ -e ~/.profile ]] && emulate sh -c 'source ~/.profile'
... 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.
Eu tenho .zprofilecompatível com .profile(contém apenas alterações PATH), portanto, apenas necessitando:
ln -s .profile .zprofile
O zsh documentação eu tenho na mão apenas menciona /etc/profilee ~/.profilepara shells de login em sh / ksh modo de compatibilidade.
% zsh --version
zsh 4.3.10 …
% cat ~/.profile
echo 'Running ~/.profile...'
O shell de login no modo nativo (argv [0] começa com -) não usa ~/.profile(mas será usado ~/.zprofile):
% zsh -c 'exec -a -zsh zsh' </dev/null
(sem saída)
sh / ksh de compatibilidade conchas modo de login usa .profile:
% zsh -c 'exec -a -sh zsh' </dev/null
Running ~/.profile...
% zsh -c 'exec -a -ksh zsh' </dev/null
Running ~/.profile...