繁体   English   中英

如何将类路径通配符作为java bash调用的参数包括在内?

[英]How do you include a classpath wildcard as an argument to a java bash call?

我正在尝试创建一个bash脚本,该脚本将在调用java之前构建一个参数列表,但是我无法使带有通配符的classpath参数起作用。 到目前为止的脚本:

#!/bin/bash
PROP_FILES=./props/default.properties
#EXTRA_PROP_FILES_HERE

ARGS="-cp \"lib/*\""
ARGS="$ARGS -Xmx10G"
ARGS="$ARGS -Duser.timezone=GMT"
ARGS="$ARGS -Danl.property.files=$PROP_FILES"

java $ARGS main.class.path.Main

问题出在ARGS="-cp \\"lib/*\\"" 我正在使用命令bash -x runscript.sh调试文件。

如果我转义了通配符cp(如上面的脚本中所示),则脚本将失败,并显示输出(请注意额外的单引号):

java -cp '"lib/*"' ...

如果我不逃避它, *会扩展到lib目录中的所有jar,并且也会失败

如何修改脚本,使其调用此脚本?

java -cp "lib/*" ...

注意 :我知道我可以执行java -cp "lib/*" $ARGS .., ,,但是我真的很想让这个工作。

您应该使用带有正确引号的数组:

propfiles='./props/default.properties'

args=(-cp 'lib/*')
args+=(-Xmx10G -Duser.timezone=GMT)
args+=("-Danl.property.files=$propfiles")

java "${args[@]}" main.class.path.Main

另外,使用大写的变量名使其更可能与环境变量发生冲突,因此最好避免使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM