[英]How do you call a java program in bash where the classpath has a whitespace?
[英]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.