如何在下面的脚本中设置CPATH的值。该脚本无法识别以下脚本第二行中的类路径。

时间:2012-07-24 06:10:52

标签: shell classpath ksh

我必须执行以下脚本

export CPATH="cpath=.:/mdcode/mtrxmdsb2/WaferChecks/bin/WaferChecksFile.jar"
/sail/lpp/IBM/Java/1.6.0/jre/bin/java \
    -classpath "$CPATH" com/ibm/md/waferchecks/ReadPasswordMain $1 $2 $3

该脚本接受3个参数。但是当我从cmd提示符运行脚本时,我收到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: com.ibm.md.wafercheck
s.ReadPasswordMain
Caused by: java.lang.ClassNotFoundException: com.ibm.md.waferchecks.ReadPassword
Main
        at java.net.URLClassLoader.findClass(URLClassLoader.java:421)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:652)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:346)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:618)
Could not find the main class: com/ibm/md/waferchecks/ReadPasswordMain.  Program
 will exit.

我知道这是一个没有正确设置classpath变量的问题。我猜错了语法。任何人都可以帮助它。感谢

2 个答案:

答案 0 :(得分:0)

export CPATH=".:/mdcode/mtrxmdsb2/WaferChecks/bin/WaferChecksFile.jar" 

此外,您不必将shell变量放在引号中。

答案 1 :(得分:0)

从分配行中删除export CPATH=。这迫使java查找名为cpath=.而不是.的文件或目录。

#! /bin/bash
jarfile=/mdcode/mtrxmdsb2/WaferChecks/bin/WaferChecksFile.jar
cpath=.:${jarfile?}

您不需要export,因为您将$ cpath作为参数传递给java -classpath选项。


En passant,你可以在调用java之前执行一些检查来消除 以下行中的一些微不足道的错误:

(< ${jarfile?}) || exit # abort on missing or unreadable file[*]
  • ${path:?} 如果路径变量为空或未定义则中止
  • ( < file ) || exit 是对打开文件进行阅读的最低限度测试。

(这是bash,ksh93和zsh的常用习语。)


最终的剧本变为:

#! /bin/bash
jarfile=/mdcode/mtrxmdsb2/WaferChecks/bin/WaferChecksFile.jar
cpath=.:${jarfile?}
(< ${jarfile?}) || exit

/sail/lpp/IBM/Java/1.6.0/jre/bin/java \
    -classpath "${cpath?}"  \
    com/ibm/md/waferchecks/ReadPasswordMain $1 $2 $3