O que deve / não deve aparecer em .zshenv, .zshrc, .zlogin, .zprofile, .zlogout?


133

Estou procurando orientações sobre o que deve ou não incluir nos vários arquivos de inicialização zsh.

Entendo a ordem de origem desses arquivos e as condições sob as quais eles são originados, mas ainda não está claro para mim o que deve acontecer em cada um.


Respostas:


156

Aqui está uma lista não exclusiva do que cada arquivo tende a conter:

  • Como .zshenvé sempre fornecido, geralmente contém variáveis ​​exportadas que devem estar disponíveis para outros programas. Por exemplo, $PATH, $EDITORe $PAGERsão muitas vezes criados em .zshenv. Além disso, você pode definir $ZDOTDIRem .zshenvpara especificar um local alternativo para o resto de sua configuração zsh.
  • .zshrcé para configuração de shell interativa. Você define opções para o shell interativo lá com os comandos setopte unsetopt. Você também pode carregar módulos shell, definir suas opções de histórico, alterar seu prompt, configurar o zle e a conclusão, etc. Você também define quaisquer variáveis ​​que são usadas apenas no shell interativo (por exemplo $LS_COLORS).
  • .zloginé originada no início de um shell de login. Este arquivo é frequentemente usado para iniciar o X usando startx. Alguns sistemas iniciam o X na inicialização, portanto esse arquivo nem sempre é muito útil.
  • .zprofileé basicamente o mesmo que .zloginexceto que é originada diretamente antes da .zshrcorigem, em vez de diretamente depois dela. De acordo com a documentação do zsh, " .zprofileé uma alternativa ao` .zlogin 'para os fãs do ksh; os dois não devem ser usados ​​juntos, embora isso certamente possa ser feito se desejado ".
  • .zlogout às vezes é usado para limpar e redefinir o terminal.

Você deve examinar os arquivos de configuração de usuários aleatórios do Github para ter uma idéia melhor do que cada arquivo deve conter.


3
Apenas como um ponto de clareza, o .zlogin é obtido após o .zshrc (consulte man zshallpara obter detalhes).
31515 Aaron

8
Esteja ciente de quando definir $PATHem .zshenv, vários outros arquivos todos são originados após este arquivo que irá substituir esse valor. Consulte zsh.org/mla/users/2003/msg00600.html .
Beau Barker

Onde deve ser $LANGe $LC_ALLir?
Lenar Hoyt

24
Apenas para minhas próprias anotações / confirmações e para ajudar outras pessoas, o pedido final é .zshenv→ [ .zprofilese logar] → [ .zshrcse interativo] → [ .zloginse logar] → [ .zlogoutàs vezes].
Gabriel L.

24

Aqui está uma lista do que cada arquivo deve / não deve conter, na minha opinião:

.zshenv

[Leia toda vez]

Esse arquivo é sempre originado, portanto, ele deve definir variáveis ​​de ambiente que precisam ser atualizadas com frequência . PATH (ou o caminho correspondente da contraparte ) é um bom exemplo, porque você provavelmente não deseja reiniciar toda a sessão para atualizá-la. Ao defini-lo nesse arquivo, a reabertura de um emulador de terminal iniciará uma nova instância do Zsh com o valor PATH atualizado.

Mas lembre-se de que esse arquivo é lido mesmo quando o Zsh é iniciado para executar um único comando (com a opção -c ), mesmo por outra ferramenta como make. Você deve ter muito cuidado para não modificar o comportamento padrão dos comandos padrão, pois isso pode quebrar algumas ferramentas (definindo aliases, por exemplo).

.zprofile

[Leia no login]

Eu pessoalmente trato esse arquivo como .zshenvse fosse comandos e variáveis ​​que devem ser definidas uma vez ou que não precisam ser atualizadas com frequência :

  • variáveis ​​de ambiente para configurar ferramentas (sinalizadores para compilação, localização da pasta de dados etc.)
  • configuração que executa comandos (como SCONSFLAGS="--jobs=$(( $(nproc) - 1 ))"), pois pode levar algum tempo para ser executado.

Se você modificar este arquivo, poderá aplicar as atualizações de configuração executando um shell de logon:

exec zsh --login

.zshrc

[Leia quando interativo]

Coloquei aqui tudo o necessário apenas para uso interativo :

  • pronto,
  • conclusão do comando,
  • correção de comando,
  • sugestão de comando,
  • destaque do comando,
  • coloração de saída,
  • Pseudônimo, suposto nome,
  • combinações de teclas,
  • comanda o gerenciamento de histórico,
  • outras ferramentas interativas diversas (auto_cd, manydots-magic) ...

.zlogin

[Leia no login]

Este arquivo é como .zprofile, mas é lido depois .zshrc. Você pode considerar o shell totalmente configurado no tempo de execução .zlogin

Então, eu o uso para iniciar comandos externos que não modificam os comportamentos do shell (por exemplo, um gerenciador de login).

.zlogout

[Leia na saída] [Dentro do shell de login]

Aqui, você pode limpar seu terminal ou qualquer outro recurso que foi configurado no login.

Como escolho onde colocar uma configuração

  • se for necessário por um comando, execute de forma não interativa :.zshenv
  • se deve ser atualizado em cada novo shell :.zshenv
  • se executar um comando que pode levar algum tempo para concluir :.zprofile
  • se estiver relacionado ao uso interativo :.zshrc
  • se for um comando a ser executado quando o shell estiver totalmente configurado :.zlogin
  • se ele liberar um recurso adquirido no login:.zlogout

0

Não faça ssh-agentchamadas .zshenv. Isso fez com que meu lesscomando não exibisse mais nenhum arquivo de texto, provavelmente porque suas opções foram personalizadas pelo Prezto ( export LESS='-F -g -i -M -R -S -w -X -z-4'in .zprofile).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.