【发布时间】:2014-01-21 17:04:45
【问题描述】:
我正在尝试使用 exec 插件创建一个简单的 bash 脚本来运行带有一些特定参数和“子”参数的 mvn 命令。看起来很简单,但我无法达到预期的效果:
这是要运行的命令:
mvn exec:java -Dexec.args="-a val1 -b val2 -c val3"
这样运行时效果很好,但我想将它包装在一个 bash 脚本中,方便所有人运行:
myapp -a val1 -b val2 -c val3
脚本很简单:
mvn exec:java -Dexec.args="$@"
但是 "$@" 并没有使它成为一个单引号值,所以我尝试引用它:
mvn exec:java -Dexec.args=\""$@"\"
我还尝试了第二个脚本,我称之为quoter:
./myapp \""$@"\"
这也不管用,在玩了一段时间后,感觉无论我引用多少次,它仍然将其视为参数列表,作为第一个元素“-a,然后第二个元素 val1,然后是第三个 -b,依此类推。
奇怪的是,如果我不引用引用脚本中的参数,并像这样运行它:
./quoter "-a val1 -b val2 -c val3"
它工作正常,它作为单个参数传递给第二个脚本,然后传递给执行 maven 命令的第一个脚本。
看起来,“$@”并不是一个由所有参数的字符串化连接组成的字符串(如果你考虑一下,这很酷),也不是回显它似乎将它转换为一个(不酷)。有没有办法让这成为可能?
PS:是的,我正在尝试将选项传递给主程序,这是一个严重依赖 spring 独立应用程序。
【问题讨论】:
-
好的,又过了几个小时,我找到了解决方案,就是这样。我创建了全新的脚本,所以我将从头开始。创建一个最终用户将执行的简单脚本并将参数作为普通命令行应用程序传递: $./myapp -a val1 -b val2 -c val3 将包含以下内容: mvn exec:java -Dexec.args= "$*" 不确定 $* 和 $@ 之间差异背后的细节,但这终于奏效了。
-
再次,刚刚看到这个,是的,我在几分钟前自己找到了它,但你是对的,当我使用 $* 时我可以解决它。当stackoverflow也允许我时,我将发布一个关于如何重写所有内容的详细信息,我还没有足够的分数来回答。
标签: bash maven exec-maven-plugin