Нужно ли мне вручную обновлять PATH в оболочках Cygwin?

Нужно ли мне вручную обновлять PATH в оболочках Cygwin?

Я использую Cygwin на Windows 7. Я не совсем пользователь Windows, поэтому для меня уже немного неудобно иметь этот дополнительный слой между моей ОС и Zsh, моей любимой оболочкой.

Теперь мне часто приходится менять PATH в Windows. Тот, который вы меняете через расширенные системные настройки. Однако я заметил, что это изменение PATH не распространяется на Zsh под Cygwin.

Очень хорошо, поэтому я заглядываю .zshrcи нахожу:

# 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"

Я этого не добавлял (ну, может быть, часть ffmpegв конце). Откуда это взялось? Cygwin устанавливает это изначально, когда устанавливает Zsh? Oh-my-zsh как-то это понимает? Каким-то образом он должен был узнать мой PATH в какой-то момент и добавить его в мой .zshrc.

TheЧасто задаваемые вопросы о Cygwinговорит,

Все переменные среды Windows импортируются при запуске Cygwin.

Но, похоже, это не так — или объявление export PATHв файле .zshrcперезаписывает все, что делает Cygwin.

Излишне говорить, что я в полном замешательстве. Так вот вопрос:

Когда я редактирую свой Windows PATH, какой рекомендуемый способ сообщить оболочке Cygwin, что она изменилась? Нужно ли мне всегда вручную редактировать профиль оболочки? Или это можно сгенерировать автоматически?

решение1

Наустановить.shскрипт для oh-my-zsh вы можете увидеть это:

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

Путь PATH, который был у вас в оболочке Cygwin (которая, в свою очередь, была скопирована из Windows при запуске Cygwin), был добавлен во время установки в .zshrc, что фактически заблокировало его.

Cygwin подбирает эти переменные среды при запуске, затем запускаются .zshrc (и другие файлы, такие как .zshenv), переопределяя все экспортированные переменные среды.

Если удалить оператор экспорта из .zshrc, Zsh просто возьмет PATH из своего родительского процесса, который должен быть PATH Windows.

Связанный контент