zsh config - para exportar ou não exportar?


23

Ao definir variáveis ​​no meu ~/.zshrc, posso usarexport

export PATH=/some/path

ou não

PATH=/some/path

Como eles diferem e qual devo usar?


Variáveis ​​ambientais que também são usadas por shells não interativos (digamos, um script de shell que você escreveu) devem entrar .zshenv.
Francisco

~/.zshenvTambém é fornecido por shells de login? Deve PATHser definido lá?
Jordelver #

1
PATHé provavelmente o melhor exemplo de variável que deve ser definida por dentro ~/.zshenv, esse arquivo é obtido por qualquer sessão do zsh (a menos que você use alguma opção para desativá-lo). Veja man zshpara uma revisão de quais arquivos são obtidos e em que ordem.
Francisco

Ok, obrigado @Francisco, vou ler a página do manual.
Jordelver #

Respostas:


21

Se você deseja que os programas sejam executados a partir do zsh para ver o var, exporte-o.
Para o caminho, você provavelmente deseja exportar.
Em vez de export PATH=/some/pathvocê provavelmente deseja export PATH="$PATH:/some/path", a menos que pretenda limpar completamente o caminho predefinido do sistema.


Isso é ótimo, obrigado. Agora vou usar a exportação como regra geral.
Jordelver

21

O Demure já respondeu sua pergunta específica. No entanto, esta é uma zshpergunta e sobre PATH. Então, aqui está outro ponto: Além da variável padrão $PATH, há também $path, que é uma matriz. Aqui você vê a diferença (dois pontos ou não ...):

$ print $PATH
/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
$print $path
/bin /usr/bin /usr/local/bin /usr/X11R6/bin

Ambas as variantes são mantidas automaticamente em sincronia. Então, qual é o benefício de usar uma matriz?

  • Você pode declarar via typeset -U path"manter apenas a primeira ocorrência de cada valor duplicado" (de man zshbuiltins). Isso significa que isso mantém seu caminho limpo, mesmo que você o adquira sucessivamente ~/.zshrc(porque você o alterou ou o que seja) e não o encha com os mesmos valores repetidamente.
  • Você pode usar path+=(/new/path)para adicionar um novo diretório ao seu PATH. Para remover um elemento, você precisa usar alguns truques, consulte, por exemplo, /programming//q/3435355/2037712 ou http://www.zsh.org/mla/users//2005/msg01132.html
  • Você pode facilmente percorrer os elementos no PATH via for i ($path) { print $i # or do something else }

Finalmente, aqui está um trecho da minha configuração:

typeset -U path
path=(/new/path1
      /new/path2
      $path)
export PATH

Obrigado, essa foi realmente uma pergunta de acompanhamento. Vou olhar para gerenciar meu caminho usando em pathvez de PATH.
Jordelver #

1
Fico feliz em ouvir como eu já temia que eu sou OT. Btw. Outra vantagem que esqueci: você pode facilmente fazer um loop sobre os elementos com for i ($path) { print $i # or do something else }.
Mpy
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.