Cygwin .bashrc不是源,因为cygwin在Windows主页中启动


9

注意:请查看下面的第二篇文章,以获取有关该问题的更新。

直到上周,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

EDIT2:重要!当我启动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

当您的bash shell启动时(并将您置于Windows主目录中),将显示什么内容echo $HOME
基思·汤普森

它呼应我的Windows主目录,而不是我的Cygwin主目录。
gsingh2011 2012年

但是使用Cygwin语法吧?(/cygdrive/c/Users/foo而不是C:\Users\foo
Keith Thompson 2012年

是的,使用Cygwin语法。
gsingh2011 2012年

HOME=/home/yourname bash -l在终端提示符下键入时会发生什么?如果我是对的,这应该给您正确的外壳程序。请注意,这是一种诊断或最好的解决方法,而不是解决方案。我们仍然需要首先弄清楚您$HOME的错误原因。根本问题是$HOME;的设置不正确;bash行为正确。
基思·汤普森

Answers:


9

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以验证是否是这种情况。

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

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

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


我已将输出添加到我的问题中,以便于阅读。好像在这里正确设置了。但是,我打开了Windows环境变量,以查看是否存在%HOME%变量,并且该变量已设置为%USERPATH%。我删除了它,但没有解决我的问题。也许需要重启?
gsingh2011 2012年

1
您是从系统控制面板还是使用Windows命令外壳将其删除的set HOME=?使用系统控制面板更可能起作用,但是即使那样也可能需要重新启动。
基思·汤普森

我通过右键单击开始菜单中的“计算机”,“属性”,“高级系统设置”,“环境变量”,然后删除“ HOME”来删除它。必须重新启动。现在Cygwin加载正确的主目录。谢谢您的帮助。
gsingh2011 2012年

1

如果您有一个.profile或.bash_profile,则该源是登录shell的名称,并且通过后您将获得一个登录shell --login。如果您提供.profile文件,那么bash将不会提供 .bashrc文件。

我试着把:

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

在您的.profile中,查看是否有帮助。通常,您的.bashrc仍应来自其他非登录Shell调用。

并且不要传递-i给bash;您不需要它。假装您-i在命令行中进行的Bash攻击。


我的.bash_profile和.profile具有相似的代码行。看到我更新的问题。
gsingh2011 2012年

对不起,@ Rich Homolka,但我想知道为什么你这么说-i是没有必要的。谢谢。
Sopalajo de Arrierez 2014年

@SopalajodeArrierez,如果您有一个交互式(不是脚本,但在终端上处于活动状态)shell,bash会假装您-i在命令行中给了它。尝试打开bash shell窗口,然后echo $-,您应该看到i(可能还有其他标志)
Rich Homolka 2014年

1

我遇到了相同的行为-可能是在安装了git(Windows)之后。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.