提问者:小点点

无法从shell脚本执行java类


我有SunOs 5.10 unix服务器,在那里我编写了一个脚本来执行java文件,如下所示

#!/bin/ksh -x

export  JAVA_HOME=openjdk1.8.0_331/bin

$JAVA_HOME/java com.myclass.MyClient

在这个脚本中,有很多代码,其中包括日志文件,以及在导出JAVA HOME之前添加的其他二进制文件类路径。但当我执行时,我得到以下错误

openjdk1.8.0_331/bin/java : Cannot execute 

我更改了很多java版本,但都出现了相同的错误


共1个答案

匿名用户

  • JAVA\u主页不是绝对路径。这是坏的;当您这样做时,许多工具都会失败。让它成为一条绝对路径。这也许可以解释你的错误,也可能无法解释,但这是一颗定时炸弹
  • JAVA\u HOME不能是bin;它位于垃圾桶上方

看起来您正在使用JAVA\u HOME作为一个ersatz脚本变量,以使脚本工作,但这是错误的:JAVA\u HOME被各种工具使用,并具有非常特定的含义,它不是您所认为的那样。

您的错误有两种明显的解释:

>

  • 一些工具看到JAVA\u主页,试图基于此运行JAVA,但失败了,因为JAVA\u主页坏了。每个操作系统都有大量的“自定义”infra,如果您将JAVA\u HOME设置为断开的值,那么SunOS设置可能不会失败,但在这里它确实失败了。修复方法是不要破坏JAVA\u主页,不要开始在新操作系统上寻找可以处理破坏的JAVA\u主页设置的设置。换句话说,您的脚本总是被破坏,只是碰巧您在特定版本的sun OS上的特定服务器上的特定设置能够处理混乱。

    一个更简单的解释也是可能的:该可执行文件不在您的操作系统架构组合上运行。简单可测试:根本不要设置JAVA_HOME,只需尝试运行该java可执行文件,例如cding到路径并运行。/java-version。看看会发生什么。如果这也让你无法执行,瞧——脚本不是问题(尽管它仍然有一个损坏的JAVA_HOME你应该修复),你需要安装一个适用于你的操作系统架构的JVM。