Tenho que atualizar manualmente o meu PATH nos shells do Cygwin?

0

Eu uso o Cygwin no Windows 7. Eu não sou realmente um usuário do Windows, então já é um pouco inconveniente ter que ter essa camada extra entre meu sistema operacional e o Zsh, meu shell de escolha.

Agora, frequentemente tenho que alterar meu PATH no Windows. Aquele que você altera através das preferências avançadas do sistema. No entanto, notei que essa mudança de PATH não se propaga para Zsh no Cygwin.

Muito bem, então eu olho em .zshrc , e eu acho:

# User configuration

export PATH="/usr/local/bin:/usr/bin:/cygdrive/c/Program Files (x86)/Intel/iCLS Client:/cygdrive/c/Program Files/Intel/iCLS Client:/cygdrive/c/Program Files/Common Files/Microsoft Shared/Windows Live:/cygdrive/c/Program Files (x86)/Common Files/Microsoft Shared/Windows Live:/cygdrive/c/Windows/system32:/cygdrive/c/Windows:/cygdrive/c/Windows/System32/Wbem:/cygdrive/c/Windows/System32/WindowsPowerShell/v1.0:/cygdrive/c/Program Files (x86)/Windows Live/Shared:/cygdrive/c/Program Files (x86)/Intel/OpenCL SDK/3.0/bin/x86:/cygdrive/c/Program Files (x86)/Intel/OpenCL SDK/3.0/bin/x64:/cygdrive/c/Program Files/Intel/Intel(R) Management Engine Components/DAL:/cygdrive/c/Program Files/Intel/Intel(R) Management Engine Components/IPT:/cygdrive/c/Program Files (x86)/Intel/Intel(R) Management Engine Components/DAL:/cygdrive/c/Program Files (x86)/Intel/Intel(R) Management Engine Components/IPT:/cygdrive/c/Program Files/ffmpeg/bin"
# export MANPATH="/usr/local/man:$MANPATH"

Eu não adicionei isso (bem, talvez o ffmpeg bit no final). De onde isso vem? O Cygwin configura isso inicialmente quando instala o Zsh? O Oh-my-zsh descobre isso de alguma forma? De alguma forma, ele deve ter conhecido meu PATH em algum momento e adicionado isso ao meu .zshrc .

A Perguntas freqüentes sobre o Cygwin diz

All Windows environment variables are imported when Cygwin starts

Mas esse não parece ser o caso - ou a declaração export PATH no .zshrc sobregrava o que o Cygwin faz.

Escusado será dizer que estou muito confuso. Então aqui está a pergunta:

Quando edito meu PATH do Windows, qual é a maneira recomendada de dizer a um shell do Cygwin que ele foi alterado? Preciso sempre editar meu perfil de shell manualmente? Ou isso pode ser gerado automaticamente?

    
por slhck 04.07.2014 / 13:51

1 resposta

2

No install.sh script para oh-my-zsh você pode ver isso:

echo "3[0;34mCopying your current PATH and adding it to the end of ~/.zshrc for you.3[0m"
sed -i -e "/export PATH=/ c\
export PATH=\"$PATH\"
" ~/.zshrc

O PATH que você tinha em seu shell Cygwin (que por sua vez foi copiado do Windows quando você iniciou o Cygwin) foi adicionado durante a instalação no .zshrc, efetivamente bloqueando-o.

O Cygwin pega essas variáveis de ambiente na inicialização, depois o .zshrc (e outros arquivos como .zshenv) são executados, substituindo quaisquer variáveis de ambiente exportadas.

Se você removeu a instrução de exportação do .zshrc, o Zsh simplesmente pegaria o PATH de seu processo pai, que deveria ser o PATH do Windows.

    
por 04.07.2014 / 14:43