Cygwin .bashrc 不是源代码,因为 cygwin 在 Windows 主目录中启动

Cygwin .bashrc 不是源代码,因为 cygwin 在 Windows 主目录中启动

注意:请参阅下面我的第二次编辑,以了解问题的最新消息。

直到上周,Cygwin 对我来说都运行良好。现在 .bashrc 无法获取源代码。我肯定是安装了某些东西或更改了某些东西,但我记不清到底是什么导致了这个问题。当我启动 Cygwin 时,我处于 ​​Windows 主页中,我的别名都不起作用。我必须手动获取 .bashrc。以下是我的 Cygwin.bat:

@echo off

C:
chdir C:\cygwin\bin

set CYGWIN=tty notitle glob

bash --login -i

有任何想法吗?

编辑:我的 .bash_profile 包含以下内容,

# source the users bashrc if it exists
if [ -f "${HOME}/.bashrc" ] ; then
  source "${HOME}/.bashrc"
fi

编辑 2:重要!当我启动 Cygwin 时,它从我的 Windows 主文件夹启动。我尝试将 .bash_profile 和 .bashrc 放在此文件夹中,并且它们的来源正确!这意味着问题已简化为找出为什么 Cygwin 从 Windows 主文件夹而不是正常的 Cygwin 主文件夹启动。

EDIT3:运行 grep Gulshan /etc/passwd/ 的结果

$ grep Gulshan /etc/passwd
Administrator:unused:500:513:U-Gulshan-HP\Administrator,S-1-5-21-1235613160-4193452482-2032876723-500:/home/Administrator:/bin/bash
Guest:unused:501:513:U-Gulshan-HP\Guest,S-1-5-21-1235613160-4193452482-2032876723-501:/home/Guest:/bin/bash
Gulshan:unused:1000:513:U-Gulshan-HP\Gulshan,S-1-5-21-1235613160-4193452482-2032876723-1000:/home/Gulshan:/bin/bash

答案1

Cygwin 常见问题解答解释如何$HOME设置:

从 Windows 启动 Cygwin 时,HOME按优先级从高到低的顺序确定以下内容:

  • HOME来自 Windows 环境,翻译为 POSIX 形式。
  • 进入/etc/passwd
  • /home/USERNAME

当从网络 (telnet、ssh、...) 使用 Cygwin 时,HOME从 进行设置/etc/passwd

如果您的HOME设置为 这样的值/cygdrive/c,则很可能是在 Windows 中设置的。启动 DOS 命令窗口并键入set HOME以验证是否是这种情况。

从网络启动时,对共享驱动器的访问通常会受到限制,因此域用户可能希望HOME在 Windows 环境中(在共享驱动器上)与在/etc/passwd(在本地驱动器上)拥有不同的权限。请注意,ssh 仅考虑/etc/passwd,而忽略 HOME

我最好的猜测是,您弄乱了文件/etc/passwd。(Windows 主目录是%USERPROFILE%,而不是%HOME%。)

grep USERNAME /etc/passwd打印(替换USERNAME为您的用户名)是什么意思?

答案2

如果你有一个 .profile 或 .bash_profile,它是在登录 shell 上获取的,并且由于你传递了 ,所以你获得了一个登录 shell --login。如果你获取 .profile,那么 bash 将不是源.bashrc。

我会尝试把:

[ -f $HOME/.bashrc ] && source $HOME/.bashrc

在您的 .profile 中,看看是否有帮助。您的 .bashrc 仍应在其他非登录 shell 调用中正常获取。

不要传递-i给 bash;你不需要它。Bash 会进行这种黑客攻击,假装你-i在命令行中输入了。

答案3

我遇到了同样的情况——可能是在安装了 git(Windows)之后。

在系统设置中,我找到了用户变量 HOME=C:\Users\me,并将其重置为 HOME=D:\home

相关内容