ssh在远程链接服务器执行命令的时候,常常会遇到环境变量的问题,以下:java
/data/resin-pro-4.0.49/bin/resin.sh: line 44: exec: java: not foundshell
若是出现上面的提示,则说明环境变量配置有问题。
先来讲解决办法bash
解决
- 目标服务器上/etc/profile文件,拷贝文件中的环境变量,例如JAVA_HOME, PATH等等
- 将环境变量拷贝至~/.bashrc文件保存
source ~/.bashrc服务器
问题解决!ssh
缘由及拓展
这里就要说明bash有两种方式interactive + login shell模式和non-interactive + non-login shell模式
在服务器上执行命令,走的是interactive + login shell模式,而经过远程登陆执行命令,走的是non-interactive + non-login shell模式。
这两种模式对于环境变量的读取是有区别的。spa
- interactive + login shell模式
Shell首先会加载/etc/profile文件,而后再尝试依次去加载下列三个配置文件之一,一旦找到其中一个便再也不接着寻找:
~/.bash_profile
~/.bash_login
~/.profileclass
- non-interactive + non-login shell模式
它不会去执行/etc/profile文件,而会去用户的HOME目录检查.bashrc并加载
因此当远程执行命令时,咱们只须要让~/.bashrc文件中的环境变量与/etc/profile中的环境变量一致便可!登录