我有两台服务器X(主机)和Y(远程)。脚本abc.sh保存在Y服务器上。我正在使用ssh命令从服务器X运行abc.sh。
脚本运行成功但是包含服务器Y的环境变量(保存在/.bash_profile中)的命令给出了空白输出。
当我从服务器Y本身运行abc.sh时,所有命令都成功运行。
我的问题是如何包含远程服务器(Y)的环境变量,以便完整脚本将成功执行。
注意:我没有etc目录的写入权限,因此我无法更改其中的任何内容。
提前致谢!
答案 0 :(得分:0)
您可以包含以下环境变量:
ssh user@host_y 'source ~/.bash_profile; /path/to/your/script/abc.sh'
由于直接命令运行不是交互式shell,因此您的变量将不起作用。 source
将在您当前的shell中运行脚本,并在该文件中为您的脚本创建可见的环境变量。
答案 1 :(得分:0)
我使用ssh连接远程计算机来运行一些cron作业。该代码无法加载所有环境变量。如果我在那台机器上运行代码,它将起作用。
我尝试了几种对我不起作用的方法。
最后,我在~/.bashrc
文件中的以下行中进行注释。它对我有用。
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
ssh连接打开一个无交互的shell。因此,如果您注释或删除此阻止代码,它将为非交互式外壳加载环境变量。
或者,您可以将所有所需的环境行代码放在该行之上。