.profile vs. .zprofile
Zsh executa ~/.zprofile , não ~/.profile , quando é invocado como uma shell de login. A razão é que o zsh tem incompatibilidades suficientes com shells padrão para quebrar scripts.
O Zsh executa ~/.profile se for chamado como sh ou ksh . Mas se o seu objetivo é obter um prompt zsh quando você fizer login, isso não é uma ajuda.
Você pode fazer /bin/sh do seu shell de login e incluir export SHELL=/bin/zsh no seu ~/.profile . Então, quando você abrir um terminal, o terminal iniciará o zsh (com exceção de alguns emuladores de terminal que não obedecem à configuração $SHELL ). Mas você ainda terá sh quando fizer o login no ssh. Isso pode ser solucionado incluindo exec zsh no final de ~/.profile (isso substitui o shell em execução por zsh), mas você precisa ter cuidado apenas para fazer isso para logins interativos e não quando ~/.profile é incluído de outros scripts como o início da sessão X (um bom teste é o nome do processo pai obtido por ps -o comm= $PPID : se for sshd ou su , então é seguro usar exec ).
A solução mais fácil para trabalhar com zsh e executar ~/.profile é criar um ~/.zprofile que entra 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, como lúcido, eu acho), você pode simplificar isso para emulate sh -c '. ~/.profile' .
.zprofile vs. .zshrc
O arquivo ~/.profile é carregado por shells login . O shell de login é o primeiro processo que é 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 comando chsh 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 existir e ~/.profile , enquanto zsh lê somente ~/.zprofile (porque sua sintaxe não é completamente 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ê faz login em um gerenciador de exibição gráfico.
Quando você inicia um emulador de terminal e obtém um prompt de shell, ou quando inicia um shell explicitamente, você obtém um shell que não é um shell de login. Como ~/.profile (ou ~/.zprofile ) é para comandos que você deseja executar ao efetuar login, um shell que não seja de login não lê esse arquivo. Em vez disso, quando você inicia um zsh interativo, ele lê ~/.zshrc . (Zsh lê ~/.zshrc em todos os shells interativos, não importando se eles são shells de login; bash, estranhamente, nunca lê ~/.bashrc em shells de login.)
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ção, configurações de opção do shell, configurações de conclusão, configurações de prompt, atalhos de teclado, etc.