Java远程执行shell命令出现java: command not found问题及解决
Java远程执行shell命令出现java: command not found
问题发现
在使用jsch远程调用shell命令时,提示java: command not found。
这个错误的意思是linux的环境变量里没有配置JAVA_HOME的内容。
但是我在Linux上查看了一下环境变量,发现已经配置了。
vim /etc/profile

解决办法
经过多方查找原因后发现是因为远程执行shell脚本时,不会自动加载环境变量,导致出现此错误,解决方案就是在脚本前加上这段代码即可。
source /etc/profile;
比如:
source /etc/profile;java -version
多个命令之间用分号隔开。
扩展补充
执行多条命令的分隔号区别:
- 每条命令使用";"隔开,则无论前边的命令执行成功与否都会继续执行下一条命令
- 若命令间使用"&&"隔开,则只有前边的命令执行成功了再会继续执行后边的命令
- 若命令间使用"||"隔开,则只有前边的命令执行失败了再回继续执行后边的命令
ssh远程报错java命令找不到
Linux的环境变量可在多个文件中配置,如/etc/profile,/etc/profile.d/*.sh,~/.bashrc,~/.bash_profilebash的运行模式可以分为login shell 以及non-login shell
直接通过终端登录访问的,输入用户名,密码得到就是一个login shell,而 “ssh 主机名 命令” 的方式

这两种shell的主要区别在于,它们启动时会加载不同的配置文件,login shell启动时会加载/etc/profile,~/.bash_profile,~/.bashrc。
non-login shell启动时会加载~/.bashrc而在加载/.bashrc(实际是/.bashrc中加载的/etc/bashrc)或/etc/profile时,都会执行如下代码片段,

因此不管是login shell还是non-login shell,启动时都会加载/etc/profile.d/*.sh中的环境变量。
因此将JAVA_HOME配置在 /etc/profile 下.
非登录模式不会加载其环境变量下的信息,因此需要将环境变量下信息尽量配置/etc/profile.d/下,通过编写env.sh 将环境变量维护在该脚本中
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
MyBatis-Plus 与 Spring Boot 集成原理实战示例
MyBatis-Plus通过自动配置与核心组件集成SpringBoot实现零配置,提供分页、逻辑删除等插件化功能,增强MyBatis而无需手写SQL,简化开发流程,本文给大家介绍MyBatis-Plus与Spring Boot集成原理实战示例,感兴趣的朋友一起看看吧2025-08-08
关于Spring Cache 缓存拦截器( CacheInterceptor)
这篇文章主要介绍了关于Spring Cache缓存拦截器( CacheInterceptor),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-12-12
springboot整合新版minio和minio的安装完整教程(新人必看)
文章详细介绍了如何在Docker中安装和配置MinIO,包括拉取镜像、创建数据卷、运行容器、设置访问密钥和端口等步骤,还展示了如何在Spring Boot应用中整合MinIO,并编写前端代码进行文件上传测试,感兴趣的朋友跟随小编一起看看吧2025-12-12
spring为java.util.Properties类型的属性进行赋值过程解析
这篇文章主要介绍了spring为java.util.Properties类型的属性进行赋值过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2020-01-01
浅谈java中BigDecimal的equals与compareTo的区别
下面小编就为大家带来一篇浅谈java中BigDecimal的equals与compareTo的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2016-11-11


最新评论