2017-05-04 393 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

非常感谢。我工作了。这是我的错误。当你不是服务器的超级用户时,这是最好的解决方案。 –