如果我在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, dossh 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"