【发布时间】:2021-11-20 11:55:07
【问题描述】:
我正在编写一个 shell 脚本,我将在其中调用一个 jar 文件。
当我执行 shell 脚本时,我从调用 java 中得到一个返回码 1。控制台输出 jar 文件也不会在终端中打印
javaArgs="-jar $baseRoot/lib/preprocess.jar"
javaCmd="java $javaArgs \"$filePath1\" \"$filePath2\"";
echo $javaCmd
$javaCmd
recode=$?
echo $recode
输出
当我直接在终端中运行 jar 文件时,我得到了预期的输出,也没有收到警告。
java -jar /shelldir/lib/preprocess.jar "/shelldir/data/file1.txt" "/shelldir/data/file1.xml"
从shell脚本运行时如何获取jar文件的控制台输出?
附加信息:我正在从 putty bash 终端执行 shell 脚本。 编辑:我在 jar 中使用 log4j 并使用 maven-shade-plugin 和 maven-jar-plugin 来构建我的 jar 以指定类路径。下面pom中提到的conf文件夹有log4j.properties文件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.file.PreProcessor</mainClass>
</transformer>
</transformers>
<minimizeJar>false</minimizeJar>
<outputFile>lib/preprocess.jar</outputFile>
<!-- <outputDirectory>target\maven-shade</outputDirectory> -->
</configuration>
</execution>
</executions>
</plugin>
<!-- Command: mvn jar -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.2</version>
<configuration>
<archive>
<manifestEntries>
<Class-Path>../conf/</Class-Path>
</manifestEntries>
<manifest>
<addDefaultEntries>true</addDefaultEntries>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
</manifest>
</archive>
<!-- <outputDirectory>lib</outputDirectory> -->
</configuration>
</plugin>
log4j.properties
#define the console appender
log4j.appender.consoleAppender = org.apache.log4j.ConsoleAppender
# now define the layout for the appender
log4j.appender.consoleAppender.layout = org.apache.log4j.PatternLayout
log4j.appender.consoleAppender.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} %-4r [%t] %-5p %c{1} %x - %m%n
log4j.appender.traceLog=org.apache.log4j.RollingFileAppender
log4j.appender.traceLog.MaxFileSize=30MB
log4j.appender.traceLog.MaxBackupIndex=20
log4j.appender.traceLog.layout = org.apache.log4j.PatternLayout
log4j.appender.traceLog.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} %-4r [%t] %-5p %c{1} %x - %m%n
log4j.appender.infoLog=org.apache.log4j.RollingFileAppender
log4j.appender.infoLog.MaxFileSize=30MB
log4j.appender.infoLog.MaxBackupIndex=20
log4j.appender.infoLog.Threshold=INFO
log4j.appender.infoLog.layout = org.apache.log4j.PatternLayout
log4j.appender.infoLog.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} %-4r [%t] %-5p %c{1} %x - %m%n
# now map our console appender as a root logger, means all log messages will go to this appender
log4j.rootLogger = TRACE, infoLog,traceLog
【问题讨论】:
-
阅读 tee 命令。
-
你能提供你的shell脚本输入吗?由于脚本看起来正确,因此尚不清楚出了什么问题。第二个字符串中唯一的 - 分号是不需要的,但它不是错误,只是没用。
-
@Saboteur 添加了更多信息
-
从参数中删除双引号可以使代码正常工作。但是,如果任何论点中有空格怎么办。因为我的参数是文件路径。我会在这里尝试并更新
-
当我的 args 包含空格时它不起作用
Invalid Arguments. Please verify the input arguments并且返回码是 1