【发布时间】:2018-12-11 00:14:37
【问题描述】:
我正在尝试创建一个 bash 脚本,该脚本将在调用 java 之前构建一个参数列表,但是我无法让带有通配符的类路径参数起作用。到目前为止的脚本:
#!/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 <b>'</b>"lib/*"<b>'</b> ...
如果我不转义它,* 会扩展到 lib 目录中的所有 jar 并且也会失败
如何修改脚本以便调用它?
java -cp "lib/*" ...
注意:我知道我可以做java -cp "lib/*" $ARGS ..,,但我真的很想让它工作。
【问题讨论】:
-
is 有一个 shell 选项可以完全关闭 glob 扩展(有关列表,请参阅
help set-- 相关选项是set -f),但这并没有修复 BashFAQ #50 中讨论的其他问题。 “使用适当的数组”是非常正确的事情。