Linux执行shell脚本执行远程命令出现bash:java:command not found问题

本文探讨了Linux环境下Java环境未配置及环境变量配置文件的问题。当使用默认系统Java版本时,需要手动配置。Linux的环境变量可配置在多个文件,如/etc/profile、/etc/profile.d/*.sh、~/.bashrc等。不同shell启动时加载不同配置文件,loginshell加载/etc/profile,non-loginshell加载~/.bashrc。为确保non-loginshell也能加载Java环境,需要在/etc/profile.d/下创建一个sh文件来设置Java环境变量。本文提供了解决此问题的具体步骤和建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、Linux环境中Java环境没配置

	所使用的的Linux的java任然是系统自带的java版本,更多细节自行百度;

2、Linux环境变量配置文件的问题

      通常我们在安装java的时候,所配置的环境大多都是配置/etc/profile文件,但问题是Linux的环境变量可以配置在多个文件,如/etc/profile, /etc/profile.d/*.sh, ~/.bashrc 等。
下面说明上述几个文件之间的关系和区别:

  1. bash 的运行模式可分为 login shell 和 non-login shell。
    例如, 我们通过终端,输入用户名、密码,登录系统之后,得到就是一个 login shell,而当我们执行以下命令 ssh hadoop103 command,在 hadoop103 执行 command 的就是一个non-login shell。
  2. 这两种 shell 的主要区别在于,它们启动时会加载不同的配置文件, login shell 启动时会加载/etc/profile, non-login shell 启动时会加载~/.bashrc。而在加载 ~/.bashrc(实际是 ~/.bashrc 中加载的/etc/bashrc) 或/etc/profile 时, 都会执行如下代码:
    在这里插入图片描述
    因此不管是 login shell 还是 non-login shell, 启动时都会加载/etc/profile.d/*.sh 中的环境变量。
  3. 但问题是我们配置java时候的/etc/profile文件,并不会在non-login shell时候被加载,所以在执行脚本的远程命令的时候不会加载non-login shell,也自然就会出现bash:java:command not found问题;

      综上所述,解决第二种问题的方式就是自己再配置一个/etc/profile.d/*.sh文件,将我们的Java环境变量配置到这个文件中。(我自己是配置一个/etc/profile.d/my_env.sh文件)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值