传递到 mvn exec:java 时保留参数间距等
Posted
技术标签:
【中文标题】传递到 mvn exec:java 时保留参数间距等【英文标题】:Preserving argument spacing, etc when passing into mvn exec:java 【发布时间】:2011-04-03 23:28:51 【问题描述】:我有一个启动 Maven exec:java 进程的 shell 脚本 -
exec mvn exec:java -Dexec.mainClass=... -Dexec.args="$*"
现在很遗憾如果我跑了
./myMagicShellScript arg1 "arg 2"
单个字符串 arg 2
并没有像我想要的那样作为单个参数通过。
关于如何正确逃脱/通过事物的任何想法(最好以干净的方式)?
【问题讨论】:
我分担你的痛苦。这么多级别的转义和标记化。 【参考方案1】:我查看了mvn
script 并做了一些测试。这是我想出的:
尝试将脚本更改为如下所示:
args=($@// /\\ )
exec mvn exec:java -Dexec.mainClass=... -Dexec.args="$args[*]"
这会将每个数组元素中的所有空格都用反斜杠转义。
【讨论】:
当我这样做时,Maven 会尝试解释命令行的其余部分,而不是将其作为 exec.args 传递:( 如果你传递明确的参数它会做什么:...-Dexec.args="arg1 'arg 2'"
?值中是否包含单引号?如果是这样,那是可取的吗? ...-Dexec.args="arg1 arg\ 2"
呢?
哇,这太糟糕了。 a 'b c' -> "a", "'b", "c'"。 a b\ c 似乎可以工作。
@Steven: mvn
是脚本还是二进制文件?
这是一个执行这种奇怪魔法的 shell 脚本:QUOTED_ARGS="" while [ "$1" != "" ] ;做 QUOTED_ARGS="$QUOTED_ARGS \"$1\"" 班次完成以上是关于传递到 mvn exec:java 时保留参数间距等的主要内容,如果未能解决你的问题,请参考以下文章