为什么 Xshell 中可以通过java -version查询到java 版本号码,Electerm 却查不到?

2026-10-08 技术分享Linux

在 Linux 服务器上排查 Java 环境时,经常遇到一种情况:同一个服务器,用 Xshell 登录后执行 `java -version` 可以正常显示版本号,但换到 Electerm 或其他终端工具里,却提示 `Command 'java' not found`。

其实这并不是 Java 没有安装,也不是服务器环境出了问题,而是不同终端工具在建立 SSH 连接时,加载的 Shell 配置文件不同,导致环境变量没有生效。

问题原因

Linux 中常见的环境变量配置文件有:
● ~/.bashrc
● ~/.bash_profile
● ~/.profile
● /etc/profile
● /etc/profile.d/
不同终端工具连接服务器时,可能会以不同方式启动 Shell。有些终端会加载登录 Shell 配置,有些则只加载交互式非登录 Shell 配置。
如果 Java 环境变量只写在 ~/.bashrc 里,那么某些终端工具登录后可能不会自动读取这个文件,于是就会出现:
echo $JAVA_HOME
能看到值,但执行:
java -version
仍然提示找不到命令。
典型表现就是:
JAVA_HOME=/home/jdk/jdk1.8.0_181
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
虽然 JAVA_HOME 已经存在,但 PATH 中并没有:
/home/jdk/jdk1.8.0_181/bin

解决方法

最稳妥的做法是把 Java 环境变量放到 /etc/profile.d/ 目录下,这样大多数终端、脚本和后台服务都能更容易读取到。
创建配置文件:
sudo vi /etc/profile.d/java.sh
写入以下内容:
export JAVA_HOME=/home/jdk/jdk1.8.0_181
export PATH=$JAVA_HOME/bin:$PATH

保存后执行:
source /etc/profile.d/java.sh
然后重新打开 Electerm 会话,执行:
java -version

如果正常显示版本号,说明问题已经解决。

临时解决办法
如果暂时不想修改系统配置,也可以在当前会话中手动加载环境变量:
source /etc/profile
java -version
或者直接使用 Java 的绝对路径运行:
/home/jdk/jdk1.8.0_181/bin/java -version
启动 jar 包时也可以写成:
nohup /home/jdk/jdk1.8.0_181/bin/java -jar blog.jar > blog.log 2>&1 &
技术分享 Linux