【问题标题】:shell quivalent code for batch file批处理文件的 shell 等效代码
【发布时间】:2018-01-15 06:02:08
【问题描述】:

我有一个批处理文件要转换成 shell 文件 批处理代码是:

SETLOCAL

SET BASEDIR=C:\hhpps\HomeHealthGrouper
SET HH_CLASSPATH=.;%BASEDIR%\dist\HomeHealthJava.jar;.;%BASEDIR%\dist\HH_PPS_V_API.jar
rem SET JAVA_VERSION=-version:1.7
SET TEST_FILE=%BASEDIR%\TestData\TestDataV7118.txt

rem SET OPTIONS=details=1

java %JAVA_VERSION% -Xms512m -Xmx512m -Djava.util.logging.config.file="%BASEDIR%\config\logging.properties" ^
    -classpath "%HH_CLASSPATH%" com.mmm.cms.homehealth.test.HomeHealthGrouper_HP ^
    "input=%TEST_FILE%" "config=%BASEDIR%\config\HomeHealthGrouper.properties" ^
    %OPTIONS%

rem reset all variables to prevent locking
SET BASEDIR=
SET HH_CLASSPATH=
SET TEST_FILE=
SET OPTIONS=

 ENDLOCAL

对于上面的代码我写了这个shell代码:

#!/bin/bash
export BASEDIR=/home/bitsbridge/Videos/HomeHealthGrouper
#export JAVA_HOME=/media    /bitsbridge/WIN XP/Program Files/Java/jdk1.6.0/bin/java
#export PATH=$PATH:/usr/java/jdk1.6.0/bin
#export JAVA_HOME
 export HH_CLASSPATH=.:$BASEDIR/dist/HomeHealthJava.jar:$BASEDIR/dist/HH_PPS_V_API.jar
#export CLASSPATH=${CLASSPATH}
classpath=""
input=""
config=""
export JAVA_VERSION=`java -version`                 #/usr/lib/jvm/java-7-oracle/
#temp="java -version"
#JAVA_VERSION=`java -version 2>&1 |awk 'NR==1{ gsub(/"/,""); print $3 }'`
export TEST_FILE=$BASEDIR/TestData/TestDataV6117.txt
export OPTIONS=1

  java $JAVA_VERSION -Xms512m -Xmx512m -Djava.util.logging.config.file="/home/bitsbridge/Videos/HomeHealthGrouper/config/logging.properties"\
            classpath="/home/bitsbridge/Videos/HomeHealthGrouper/dist/HomeHealthJava.jar:/home/bitsbridge/Videos/HomeHealthGrouper/dist/HH_PPS_V_API.jar"  com.mmm.cms.homehealth.test.HomeHealthGrouper_HP\
            input="/home/bitsbridge/Videos/HomeHealthGrouper/TestData/TestDataV6117.txt" config="/home/bitsbridge/Videos/HomeHealthGrouper/config/HomeHealthGrouper.properties"\
            $OPTIONS


 export BASEDIR=""
 export HH_CLASSPATH=""
 export TEST_FILE=""
  export OPTIONS=""

 #${CLASSPATH}:.
 #com.mmm.cms.homehealth.test.HomeHealthGrouper_HP

执行上述代码时出现错误:

错误:无法找到或加载主类 classpath=.home.bitsbridge.Videos.HomeHealthGrouper.dist.HomeHealthJava.jar:.home.bitsbridge.Videos.HomeHealthGrouper.dist.HH_PPS_V_API.jar

但是在执行时它无法加载类路径中提到的 jar 文件并且它给出了错误:

Java(TM) SE 运行时环境 (build 1.7.0_80-b15) Java HotSpot(TM) 服务器 VM(内部版本 24.80-b11,混合模式)错误:无法找到或加载 主班 类路径=.home.Desktop.HPPP.HomeHealthGrouper.dist.HomeHealthJava.jar:.home.D esktop.HPPP.HomeHealthGrouper.dist.HH_PPS_V_API.jar

PS:我已经检查了java路径。

这是/etc/environment/的内容:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/$
JAVA_HOME="/usr/lib/jvm/java-7-oracle"

请帮忙找出问题。我被困在这里一个多星期了

我已经更新了上面提到的 shell 代码,并且在 shellcheck.net 上检查过代码是无问题的:

 #!/bin/bash
 BASEDIR=/home/Desktop/HPPP/HomeHealthGrouper
 FILE=/home/Desktop/HPPP/HomeHealthGrouper/config/logging.properties

 export HH_CLASSPATH=.:/home/Desktop/HPPP/HomeHealthGrouper/dist/HomeHealthJava.jar:.:$BASEDIR/dist/HH_PPS_V_API.jar
 JAVA_VERSION="$(java -version)"            
 export JAVA_VERSION
 export TEST_FILE=$BASEDIR/TestData/TestDataV6117.txt
 export OPTIONS=1

 java "$JAVA_VERSION" -Xms512m -Xmx512m -Djava.util.logging.config.file="$FILE"\
 -classpath="/home/Desktop/HPPP/HomeHealthGrouper/dist/HomeHealthJava.jar:/home/Desktop/HPPP/HomeHealthGrouper/dist/HH_PPS_V_API.jar" com.mms.cms.homeHealth.test.HomeHealthGrouper_HP\
 "input=/home/Desktop/HPPP/HomeHealthGrouper/TestData/TestDataV6117.txt" "config=/home/Desktop/HPPP/HomeHealthGrouper/config/HomeHealthGrouper.properties"\
 $OPTIONS


 export BASEDIR=""
 export HH_CLASSPATH=""
 export TEST_FILE=""
 export OPTIONS=""

以上代码执行后的输出:

  • ./javaaad.sh java版本“1.7.0_80” Java(TM) SE 运行时环境 (build 1.7.0_80-b15) Java HotSpot(TM) 服务器虚拟机(构建 24.80-b11,混合模式) 错误:无法找到或加载主类

出现错误:

错误:无法找到或加载主类

【问题讨论】:

  • 找不到问题所在。通过[ shellcheck ]运行脚本
  • 我不确定投反对票的目的是什么。没有合理评论的否决票无济于事。 :-(恕我直言
  • 感谢网站。结构有一点点变化。希望它能正常工作,谢谢 sjsam
  • 即使我不知道投反对票的原因。
  • @mpk24 嗯。如果您是 bash 新手,那么 shellcheck 是一个非常宝贵的工具。也可以随意使用bash -x 来调试你的脚本。祝你好运:-)

标签: java shell jar jvm


【解决方案1】:

在类路径开关前添加连字符:classpath=... => -classpath=...

java -h
...
-classpath <class search path of directories and zip/jar files>
              A : separated list of directories, JAR archives,
              and ZIP archives to search for class files.
...

还将java $JAVA_VERSION ... 更改为java ...,因为现在变量$JAVA_VERSION 中有空字符串,导致额外的参数java '' ...java -version 不向 stdout 打印任何内容,向 stderr 打印多行版本描述。

【讨论】:

  • 没有帮助。错误:无法找到或加载主类
  • 运行bash -x yourscript并将结果复制粘贴到pastebin.com
  • pastebin.com/CPY6B7SE 。我在这里上传了shell代码和bash -x的输出。
  • 我想我需要 JAVA_VERSION 但需要用其他东西更改它,在删除 $JAVA_VERSION 后我无法弄清楚得到错误:> 无法识别的选项:-classpath=.:/home/ Desktop/HPPP/HomeHealthGrouper/dist/HomeHealthJava.jar:.:/home/Desktop/HPPP/HomeHealthGrouper/dist/HH_PPS_V_API.jar >错误:无法创建Java虚拟机。 >错误:发生了致命异常。程序将退出。
  • -version 开关设置要使用的 java 版本的要求。先检测再要求检测版本是没有意义的。要么在其中添加一些常量值,要么将其排除在外。
猜你喜欢
  • 1970-01-01
  • 2021-06-07
  • 2022-01-18
  • 1970-01-01
  • 2014-11-28
  • 1970-01-01
  • 2013-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多