Cygwin:xterm 未在用户 $HOME 中启动……?

Cygwin:xterm 未在用户 $HOME 中启动……?

我在 Windows 上安装了可以运行的 Xming / Cygwin。嗯,大部分...

我确实在 /etc/passwd 中将我的主目录设置为 /cygdrive/d。当我启动 Cygwin Bash Shell(经过改进的 DOS 窗口)时,一切正常 - $HOME 设置为 /cygdrive/d,Cygwin 找到我的 ~/.bash_profile,一切正常。

然而,当我启动时xterm,它开始于/cygdrive/c/Documents and Settings/<Username>,并且确实不是提供我的 .bash_profile,这真是太烦人了。

今天下午的某个时候,它还正常工作,但现在却坏了,但我无论如何也想不起来我是怎么把它弄坏的。

帮助?

编辑:抱歉,我应该说得更准确一些。xterm 以 启动xterm -ls,即作为登录 shell。它找到全局配置文件(因为它运行 bash 并正确设置 $PS1),但它显然对 $HOME 感到困惑(因此不会运行 ~/.bash_profile,因为它找不到它)。

我知道一两种方法可以解决这个问题,但我想找到原因这次混乱并没有修复其影响。

编辑2:进一步的测试表明,这种情况 - $HOME 没有根据 /etc/passwd 设置 - 会发生仅当应用程序从 Xming / Xmingrc 任务栏菜单启动时。它还具有传染性:任何从“损坏的”xterm 启动的子 xterm 都会在错误的 $HOME 中打开。反之亦然:任何从“损坏的”xterm 启动的 bash / xterm外部Xmingrc 菜单(在正确的 $HOME 中打开)可以启动同样正确的子 xterm。

我是一个少量这里很困惑。

答案1

xterm从当前目录启动并执行您要求它执行的程序(默认情况下是您首选的 shell,但不是登录 shell)。这在 Windows 和 Unix 上都是如此。如果您想要一个登录 shell,请运行xterm -e bash --login。如果您想从主目录启动,请在快捷方式中设置目录字段(假设您从 Windows 快捷方式启动 xterm)。

答案2

我在 Xming 文档中找到了隐藏的答案。如果HOME系统中没有设置环境变量,Xming 将其设置为%USERPROFILE%

/etc/passwd正如 ak2 指出的那样,这反过来又会覆盖 Cygwin设置。

因此,解决方案是在控制面板中手动设置HOME。

相关内容