注意:请参阅下面我的第二次编辑,以了解问题的最新消息。
直到上周,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