是否可以让 cygwin 忽略 Windows HOME 环境变量?

是否可以让 cygwin 忽略 Windows HOME 环境变量?

作为安装 EGit 的一部分,我必须在 Windows 中设置 HOME 环境变量。这导致了一个问题,即 cygwin 认为 Windows 中的 HOME 环境变量比 /etc/passwd 中的值更重要。因此,cygwin 认为我在 cygwin 中的 HOME 目录已从其先前的位置移动到我的 Windows 用户配置文件文件夹。我宁愿将我的 cygwin 文件分开,因为我的用户配置文件文件夹已经够乱了,但似乎不可能这样做。

有什么办法可以让 cygwin 使用 /etc/passwd 中的值而不是 HOME 环境变量?

答案1

编辑 /etc/profile 并更改行

# Set the user id
USER="$(id -un)"

# Set the user id
USER="$(id -un)"

# Set user home dir
HOME=$(eval echo "~$USER")

这会强制 Cygwin 始终使用 /etc/passwd 中的值。这比使用 Cygwin.bat 更好,因为这适用于所有登录 shell,无论它们是如何生成的。

答案2

cygwin脚本通常用于启动 Cygwin shell 的文件可以修改为使用 HOME 执行任何您需要的操作。您可以尝试:

set HOME=

根据文档和经验,这实际上应该取消设置 %HOME%,这样 cygwin 就看不到它了。由于 cygwin 默认将 $HOME 设置为 /etc/passwd 中的值(如果在其继承环境的父进程中未设置 HOME),因此您应该会得到想要的结果。

请注意,我说的是

set HOME=

实际上是从设置的环境变量中删除了 HOME;而不是像人们所期望的那样,将 HOME 设置为空字符串(但将其保留在环境中)的替代结果。

答案3

您可以尝试以下方法:

  1. 编辑cygwin脚本以及set HOME=您想要的任何目录。

  2. 编辑 /etc/profile ( C:\cygwin\etc\profile) 并更改cd "${HOME}"为您想要的任何目录。

相关内容