2011-07-15 72 views
0

如果我設置環境變量CVSROOT在Windows中,並給它像cvsserver值:/家庭/ CVS,如果再Cygwin的繼承環境變量從Windows有時

1)打開Windows CMD外殼,並做「回聲%CVSROOT %」,我得到 「cvsserver:家用/ CVS」

2)打開Cygwin的bash shell,然後執行 「echo $ CVSROOT」,我得到 「cvsserver:從Linux中,ssh來家/ CVS」

3)該機器並做「echo $ CVSROOT」,我什麼都沒得到。

如果我希望ssh會話有一個CVSROOT的值,我需要將它插入到.bashrc中。

有什麼可以做的,以便ssh會話也從Windows繼承環境變量?

編輯:

4)從Linux上,執行

ssh machine "printenv CVSROOT" 

在.bashrc中設置環境變量,我什麼也沒得到。在交互式提示符下,我得到變量值,但這種方式什麼也沒有。

回答

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 
0

有一件事情是Windows的> Cygwin的另一件事是SSH

你嘗試轉發你的Windows變量,你的linux明確:

ssh -t [email protected] "export CVSROOT=%CVSROOT%;/bin/bash --login" 
0

重新啓動您的計算機將解決這個問題。環境變量更改不會傳播到所有正在運行的程序。

1

如果你的SSH服務運行在Windows機器上(我假設你這麼做),它通過Cygwin。

該服務似乎在啓動時不會刷新環境變量的快照。

重新啓動服務應該足夠了。

2

我找到了一個很好的解決方案在這裏:http://www.smithii.com/node/44

它會查找系統變量在註冊表中,並設置在通過ssh打開的會話變量。

然後,從您的ssh客戶端調用小塊腳本(同時連接到您的cygwin的服務器),因爲這樣: SSH $ WINDOWSUSER @ $ WINDOWSBUILDSERVER 「源/ etc/profile文件;回聲$ CVSROOT」

+0

/etc/profile應自動採購。而今天更希望不改變它,而只是用提供的腳本創建新文件並將其放置到/etc/profile.d中 – Hubbitus

0

我遇到了同樣的問題。通過如下設置變量來獲得此工作:

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