2017-05-04 396 views
0

我有兩個服務器X(主機)和Y(遠程)。腳本abc.sh保存在Y服務器上。我使用ssh命令從服務器X運行abc.sh。在ssh命令中使用遠程服務器的環境變量

腳本運行成功,但包含服務器Y的環境變量(保存在/.bash_profile中)的命令給出空白輸出。

當我從服務器Y本身運行abc.sh時,所有命令都成功運行。

我的問題是如何包含遠程服務器(Y)的環境變量,以便完整的腳本將成功執行。

注意:我沒有對etc目錄的寫入權限,所以我無法更改任何內容。

在此先感謝!

+2

可能的重複[爲什麼SSH遠程命令獲取較少的環境變量,然後手動運行?](http://stackoverflow.com/questions/216202/why-does-an-ssh-remote-command-get-更少的環境變量,然後當運行人) – kaylum

+0

不,我沒有找到我的答案,這就是爲什麼單獨問。 –

+1

爲什麼不。你讀完了嗎?例如:「當bash作爲交互式登錄shell或作爲具有--login選項的非交互式shell調用時,它首先從文件/ etc/profile讀取並執行命令,如果該文件存在的話」。也就是說,你是否嘗試將env值放在/ etc/profile中?還有其他一些建議 - 你是否嘗試過所有這些建議,但沒有一個能爲你工作?如果是這種情況,你需要說出你嘗試過的以及爲什麼他們不適合。 – kaylum

回答

0

你可以包括你的環境變量,如下列:

ssh [email protected]_y 'source ~/.bash_profile; /path/to/your/script/abc.sh' 

由於直接運行的命令不是一個交互的shell,您的變量將不會在那裏工作。 source將在當前shell中運行腳本,並將該文件中的可見環境變量寫入腳本。

+0

感謝您的回答。 SSH $用戶名@ $服務器 「源$ REMOTE_HOME/.bash_profile中」 SSH $用戶名@ $服務器 「SH $ REMOTE_HOME /用戶/ prasoon/env_var.sh」 我已經嘗試過,但在執行它給了跟隨錯誤,因此不適合我。 stty:標準輸入:無效的參數 –

+0

非常感謝。我工作了。這是我的錯誤。當你不是服務器的超級用戶時,這是最好的解決方案。 –