Cygwin有时会从Windows继承环境变量



如果我在Windows中设置环境变量CVSROOT并给它一个像cvsserver:/home/cvs这样的值,如果

1)打开Windows CMD shell并执行"echo %CVSROOT%",我得到"cvsserver:home/cvs"

2)打开Cygwin bash shell并执行"echo $CVSROOT",我得到"cvsserver:home/cvs"

3)从Linux, ssh到机器并执行"echo $CVSROOT",我什么也没得到。

如果我希望ssh会话具有CVSROOT的值,我需要将其插入.bashrc。

是否可以做一些事情,使ssh会话也从Windows继承环境变量?

编辑:

4) from Linux, do
ssh machine "printenv CVSROOT"

使用.bashrc中设置的环境变量,我什么也得不到。在交互式提示符下,我获得了变量值,但这种方法什么也没有给出。

我找到了一个很好的解决方案:http://www.smithii.com/node/44

在注册表中查找系统变量,并在通过ssh打开的会话中设置变量。

然后,从ssh客户端调用一小段脚本(同时连接到cygwin服务器),如下所示:ssh $WINDOWSUSER@$WINDOWSBUILDSERVER/etc/profile$CVSROOT "

好了,我明白了…

无论出于何种原因,bash shell没有继承系统上设置的CVSROOT变量。我需要把这行

export CVSROOT=cvsserver:/home/cvs

放到.bashrc和.bash_profile文件中。

在.bashrc文件中需要这一行,这样非交互式登录将获得CVSROOT变量。例如:

ssh machine "printenv CVSROOT"

需要在.bashrc文件中加入这一行,以便CVSROOT存在。

在.bash_profile文件中需要这一行,以便交互式登录将获得CVSROOT变量。例如:

ssh machine
printenv CVSROOT

如果你有你的SSH服务运行在一个windows盒子(我假设你做),它是通过Cygwin。

该服务似乎在启动时对环境变量进行快照,而不刷新它们。

一个是Windows->Cygwin另一个是ssh

你试过将你的Windows变量显式地转发到你的linux吗?

ssh -t user@host "export CVSROOT=%CVSROOT%;/bin/bash --login"

重新启动计算机将解决此问题。环境变量的变化不会传播到所有正在运行的程序。

我碰到了同样的问题。通过这样设置变量来实现:

ssh machine "export MYVARIABLE=1 && printenv MYVARIABLE"

最新更新