Eu uso o Cygwin no Windows 7. Não sou realmente um usuário do Windows, então já é um pouco inconveniente para mim ter essa camada extra entre meu sistema operacional e o Zsh, meu shell preferido.
Agora, frequentemente tenho que alterar meu PATH no Windows. Aquele que você altera por meio das preferências avançadas do sistema. No entanto, notei que essa alteração no PATH não se propaga para Zsh no Cygwin.
Muito bem, então eu olho .zshrc
e encontro:
# 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 um ffmpeg
pouco no final). De onde isso vem? O Cygwin configura isso inicialmente quando instala o Zsh? 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 arquivo .zshrc
.
OPerguntas frequentes sobre Cygwindiz,
Todas as variáveis de ambiente do Windows são importadas quando o Cygwin é iniciado
Mas esse não parece ser o caso - ou a export PATH
declaração no .zshrc
substitui tudo 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 informar ao shell do Cygwin que ele foi alterado? Preciso sempre editar meu perfil de shell manualmente? Ou isso pode ser gerado automaticamente?
Responder1
Noinstalar.shscript para oh-my-zsh você pode ver isto:
echo "\033[0;34mCopying your current PATH and adding it to the end of ~/.zshrc for you.\033[0m"
sed -i -e "/export PATH=/ c\\
export PATH=\"$PATH\"
" ~/.zshrc
O PATH que você tinha no shell do Cygwin (que por sua vez foi copiado do Windows quando você iniciou o Cygwin) foi adicionado durante a instalação ao .zshrc, bloqueando-o efetivamente.
O Cygwin seleciona essas variáveis de ambiente na inicialização e, em seguida, o .zshrc (e outros arquivos como .zshenv) são executados, substituindo quaisquer variáveis de ambiente exportadas.
Se você removesse a instrução de exportação do .zshrc, o Zsh apenas pegaria o PATH de seu processo pai, que deveria ser o PATH do Windows.