.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.