我是否必须在 Cygwin shell 中手动更新我的 PATH?

我是否必须在 Cygwin shell 中手动更新我的 PATH?

我在 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 常见问题解答说,

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。

相关内容