Java远程执行shell命令出现java: command not found问题及解决

 更新时间:2023年07月10日 17:10:33   作者:ted_happy  
这篇文章主要介绍了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 将环境变量维护在该脚本中

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring Cloud实现灰度发布的示例代码

    Spring Cloud实现灰度发布的示例代码

    这篇文章主要为大家详细介绍了Spring Cloud实现灰度发布的相关知识,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下
    2023-09-09
  • java中将list用逗号隔开拼成字符串的4种方法例子

    java中将list用逗号隔开拼成字符串的4种方法例子

    我们经常在开发过程之中会遇到需要把返回的Id list转换为一个使用逗号(,)分隔的字符串,下面这篇文章主要给大家介绍了关于java中将list用逗号隔开拼成字符串的4种方法例子,需要的朋友可以参考下
    2024-01-01
  • sqlserver的jdbc配置方法

    sqlserver的jdbc配置方法

    这篇文章主要介绍了sqlserver的jdbc配置方法,需要的朋友可以参考下
    2014-04-04
  • Java开发环境不再需要配置classpath问题

    Java开发环境不再需要配置classpath问题

    这篇文章主要介绍了Java开发环境不再需要配置classpath问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • IDEA使用GsonFormat完成JSON和JavaBean之间的转换

    IDEA使用GsonFormat完成JSON和JavaBean之间的转换

    这篇文章主要介绍了IDEA使用GsonFormat完成JSON和JavaBean之间的转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Java8如何将Array转换为Stream的实现代码

    Java8如何将Array转换为Stream的实现代码

    这篇文章主要介绍了Java8如何将Array转换为Stream的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Spring中的@PostConstruct注解使用详解

    Spring中的@PostConstruct注解使用详解

    这篇文章主要介绍了Spring中的@PostConstruct注解使用详解,该注解被用来修饰一个非静态的void方法,被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次,需要的朋友可以参考下
    2023-10-10
  • java线程间通讯的一些方法总结

    java线程间通讯的一些方法总结

    这篇文章主要介绍了java线程间通讯的一些方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • gRPC实践之proto及Maven插件概念及使用详解

    gRPC实践之proto及Maven插件概念及使用详解

    这篇文章主要为大家介绍了gRPC实践之proto及Maven插件概念及使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • Java深入了解数据结构之优先级队列(堆)

    Java深入了解数据结构之优先级队列(堆)

    普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。通常采用堆数据结构来实现
    2022-01-01

最新评论