Java遠(yuǎn)程執(zhí)行shell命令出現(xiàn)java: command not found問(wèn)題及解決
Java遠(yuǎn)程執(zhí)行shell命令出現(xiàn)java: command not found
問(wèn)題發(fā)現(xiàn)
在使用jsch遠(yuǎn)程調(diào)用shell命令時(shí),提示java: command not found。
這個(gè)錯(cuò)誤的意思是linux的環(huán)境變量里沒(méi)有配置JAVA_HOME的內(nèi)容。
但是我在Linux上查看了一下環(huán)境變量,發(fā)現(xiàn)已經(jīng)配置了。
vim /etc/profile

解決辦法
經(jīng)過(guò)多方查找原因后發(fā)現(xiàn)是因?yàn)檫h(yuǎn)程執(zhí)行shell腳本時(shí),不會(huì)自動(dòng)加載環(huán)境變量,導(dǎo)致出現(xiàn)此錯(cuò)誤,解決方案就是在腳本前加上這段代碼即可。
source /etc/profile;
比如:
source /etc/profile;java -version
多個(gè)命令之間用分號(hào)隔開(kāi)。
擴(kuò)展補(bǔ)充
執(zhí)行多條命令的分隔號(hào)區(qū)別:
- 每條命令使用";"隔開(kāi),則無(wú)論前邊的命令執(zhí)行成功與否都會(huì)繼續(xù)執(zhí)行下一條命令
- 若命令間使用"&&"隔開(kāi),則只有前邊的命令執(zhí)行成功了再會(huì)繼續(xù)執(zhí)行后邊的命令
- 若命令間使用"||"隔開(kāi),則只有前邊的命令執(zhí)行失敗了再回繼續(xù)執(zhí)行后邊的命令
ssh遠(yuǎn)程報(bào)錯(cuò)java命令找不到
Linux的環(huán)境變量可在多個(gè)文件中配置,如/etc/profile,/etc/profile.d/*.sh,~/.bashrc,~/.bash_profilebash的運(yùn)行模式可以分為login shell 以及non-login shell
直接通過(guò)終端登錄訪問(wèn)的,輸入用戶名,密碼得到就是一個(gè)login shell,而 “ssh 主機(jī)名 命令” 的方式

這兩種shell的主要區(qū)別在于,它們啟動(dòng)時(shí)會(huì)加載不同的配置文件,login shell啟動(dòng)時(shí)會(huì)加載/etc/profile,~/.bash_profile,~/.bashrc。
non-login shell啟動(dòng)時(shí)會(huì)加載~/.bashrc而在加載/.bashrc(實(shí)際是/.bashrc中加載的/etc/bashrc)或/etc/profile時(shí),都會(huì)執(zhí)行如下代碼片段,

因此不管是login shell還是non-login shell,啟動(dòng)時(shí)都會(huì)加載/etc/profile.d/*.sh中的環(huán)境變量。
因此將JAVA_HOME配置在 /etc/profile 下.
非登錄模式不會(huì)加載其環(huán)境變量下的信息,因此需要將環(huán)境變量下信息盡量配置/etc/profile.d/下,通過(guò)編寫(xiě)env.sh 將環(huán)境變量維護(hù)在該腳本中
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MyBatis-Plus 與 Spring Boot 集成原理實(shí)戰(zhàn)示例
MyBatis-Plus通過(guò)自動(dòng)配置與核心組件集成SpringBoot實(shí)現(xiàn)零配置,提供分頁(yè)、邏輯刪除等插件化功能,增強(qiáng)MyBatis而無(wú)需手寫(xiě)SQL,簡(jiǎn)化開(kāi)發(fā)流程,本文給大家介紹MyBatis-Plus與Spring Boot集成原理實(shí)戰(zhàn)示例,感興趣的朋友一起看看吧2025-08-08
Java二分查找之循環(huán)條件與區(qū)間寫(xiě)法詳解
二分查找算法是一種高效的搜索算法,適用于有序數(shù)組,它通過(guò)將查找范圍不斷減半,逐步縮小目標(biāo)值的搜索空間,最終找到目標(biāo)元素或確認(rèn)目標(biāo)不存在,這篇文章主要介紹了Java二分查找之循環(huán)條件與區(qū)間寫(xiě)法的相關(guān)資料,需要的朋友可以參考下2026-03-03
關(guān)于Spring?Cache?緩存攔截器(?CacheInterceptor)
這篇文章主要介紹了關(guān)于Spring?Cache緩存攔截器(?CacheInterceptor),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
springboot整合新版minio和minio的安裝完整教程(新人必看)
文章詳細(xì)介紹了如何在Docker中安裝和配置MinIO,包括拉取鏡像、創(chuàng)建數(shù)據(jù)卷、運(yùn)行容器、設(shè)置訪問(wèn)密鑰和端口等步驟,還展示了如何在Spring Boot應(yīng)用中整合MinIO,并編寫(xiě)前端代碼進(jìn)行文件上傳測(cè)試,感興趣的朋友跟隨小編一起看看吧2025-12-12
spring為java.util.Properties類型的屬性進(jìn)行賦值過(guò)程解析
這篇文章主要介紹了spring為java.util.Properties類型的屬性進(jìn)行賦值過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01
SpringBoot定時(shí)任務(wù)實(shí)現(xiàn)數(shù)據(jù)同步的方法
業(yè)務(wù)需求是,通過(guò)中臺(tái)調(diào)用api接口獲得,設(shè)備數(shù)據(jù),要求現(xiàn)實(shí)設(shè)備數(shù)據(jù)的同步,這篇文章主要介紹了SpringBoot定時(shí)任務(wù)實(shí)現(xiàn)數(shù)據(jù)同步的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
淺談java中BigDecimal的equals與compareTo的區(qū)別
下面小編就為大家?guī)?lái)一篇淺談java中BigDecimal的equals與compareTo的區(qū)別。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11
Java實(shí)現(xiàn)CSV格式轉(zhuǎn)對(duì)象
csv全稱“Comma-Separated Values”,是一種逗號(hào)分隔值格式的文件,常用來(lái)存儲(chǔ)數(shù)據(jù)的純文本格式文件。本文將用Java語(yǔ)言實(shí)現(xiàn)CSV轉(zhuǎn)對(duì)象,需要的可以參考一下2022-06-06

