我在 Windows 7 上使用 Cygwin。我并不是真正的 Windows 用户,因此在我的操作系统和我选择的 shell Zsh 之间添加这一额外的层对我来说已经有点不方便了。
现在,我经常需要在 Windows 中更改 PATH。可以通过高级系统偏好设置进行更改。但是,我注意到此 PATH 更改不会传播到 Cygwin 下的 Zsh。
很好,所以我查看了一下.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
.
Cygwin 启动时导入所有 Windows 环境变量
但事实似乎并非如此——或者声明export PATH
会.zshrc
覆盖 Cygwin 所做的一切。
不用说,我非常困惑。所以问题是:
当我编辑 Windows PATH 时,建议用什么方式告诉 Cygwin shell 它已更改?我是否需要始终手动编辑 shell 配置文件?或者可以自动生成?
答案1
在安装文件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
您的 Cygwin shell 上的 PATH(当您启动 Cygwin 时从 Windows 复制而来)在安装过程中被添加到 .zshrc 中,从而有效地锁定了它。
Cygwin 在启动时获取这些环境变量,然后运行 .zshrc(和其他文件,如 .zshenv),覆盖任何导出的环境变量。
如果从 .zshrc 中删除了导出语句,Zsh 将只从其父进程中获取 PATH,该 PATH 应该是 Windows 的 PATH。