2012-03-22 32 views
7

启动cygwin外壳后,它只是定位错误的家目录:Cygwin的壳不执行的.bashrc

[email protected] ~ 
$ pwd 
/cygdrive/c/Users/xfire 

但它曾经是的/ home/XFire软件

[email protected] /etc 
$ cat passwd | grep xfire 
xfire:unused:22773:10513:U-CORP\xfire,S-1-5-21-527237240-725345543-682003330-12773:/home/xfire:/bin/bash 

而且/ home/xfire中的.bashrc没有执行,即使我将它复制到/ cygdrive/c/Users/xfire,它也不起作用!

+0

检查了这一点:http://www.cygwin.com/ml/cygwin/2002-01/msg00826.html – jahroy 2012-03-22 03:42:50

+0

某些程序在Windows注册表中添加一个“HOME”环境,并将值设置为“C:\ Users \ xfire“,这就是为什么cygwin将该目录作为家庭的原因。 http://cygwin.com/faq-nochunks.html – 2012-03-22 06:24:13

+0

无用的猫:'grep xfire passwd'。 – Jens 2012-04-27 09:29:23

回答

6

某些程序在Windows注册表中添加一个“HOME”环境,并将该值设置为“C:\ Users \ xfire”,这就是为什么cygwin将该目录作为家庭的原因。 cygwin.com/faq-nochunks.html

+0

太糟糕了,这是你自己的答案,因此当你选择它作为正确的答案时不会碰到最高,因为如果HOME变量没有设置的话,那么两个顶级答案基本上是无用的。 – 2014-05-14 17:38:42

+0

嗯,这解释了为什么会发生,但不是如何解决问题... – bgusach 2014-08-15 11:19:45

+0

我的意思是,我知道它的工作原理,如果我删除它,但如果我仍然在Windows HOME? – bgusach 2014-08-15 11:27:44

31

在Cygwin,我加入这个我~/.bash_profile

. ~/.bashrc 
+3

这为我解决了它。也许你可以弄清楚发生了什么,为什么埃文斯想接受他的答案? – 2015-07-07 16:12:02

+1

对于其他人可能会好奇的原因。 cygwin默认的终端程序是mintty。如果您检查用于启动终端的图标的属性,则会发现它以单独的“ - ”结尾。这告诉mintty将shell作为登录shell运行。如果shell是**不是**登录shell,则Bash只执行.bashrc。对于登录shell,它只执行.bash_profile(或.profile)。在许多其他unix中,终端程序将shell作为非登录shell启动,因此它们默认执行.bashrc而不是.bash_profile。 – Aner 2017-09-29 15:45:08

1

您也还可以设置BASH_ENV变量,例如,BASH_ENV = 'C:\ DOCUME〜1 \ dwyttenb \ .bashrc' 中

3

在我的版本的cygwin的我发现,只有~/.profile正在execueted所以添加

if [ -e "${HOME}/.bash_profile" ]; then 
    source "${HOME}/.bash_profile" 
fi 

.profile文件。我的.bash_profile文件包含.bashrc的另一个测试,并从那里执行该测试。我还将以下两行添加到我的.bashrc文件中。

export BASH_ENV="${HOME}/.profile" 
export ENV="${HOME}/.profile" 

第一这些确保.profile得到在非交互式终端执行,并且所述第二可确保它被在POSIX终端执行的。我发现了一个非常有用的解释,说明什么时候运行,什么时候在Bash Reference Manual

在你的情况下,它不会帮助,因为你有一个问题,你的HOME环境变量的值,但是当搜索这个问题时,这个页面在列表上很高。