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

时间:2011-07-15 14:20:23

标签: windows ssh cygwin environment-variables

如果我在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)来自Linux,做

ssh machine "printenv CVSROOT"

在.bashrc中设置环境变量,我什么都没得到。在交互式提示符下,我得到变量值,但这种方式什么都没有。

6 个答案:

答案 0 :(得分:2)

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

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

然后,从ssh客户端调用小块脚本(连接到cygwin服务器时),如下所示: ssh $ WINDOWSUSER @ $ WINDOWSBUILDSERVER“source / etc / profile; echo $ CVSROOT”

答案 1 :(得分:1)

好的,我已经弄清楚了......

无论出于何种原因,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

答案 2 :(得分:1)

如果你在Windows机器上运行你的SSH服务(我假设你这样做),那就是通过Cygwin。

该服务似乎在启动时拍摄环境变量的快照,并且不会刷新它们。

重新启动服务就足够了。

答案 3 :(得分:0)

有一件事是Windows-> Cygwin另一件事是ssh

您是否尝试过明确地将Windows变量转发到Linux:

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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