Lea*_*501 0 java bash junit maven
我遇到了 mvn 命令的问题,我正在将其构建为变量值,然后执行。
如果我直接执行命令,作为变量值的回显,它可以完美运行。但是如果我执行变量值,它会给我一个错误,就像参数之一不在双引号内一样。
我需要构建命令,因为参数取决于来自其他脚本而不是运行这些脚本的某些变量名称。
这些是命令:
有了这个,如果 $CLOUD 值为 true,我将 Maven 命令存储在带有一些额外参数的变量中:
$ export CLOUD=true && export mvn_cmd="mvn clean test --batch-mode $(if [[ "$CLOUD" == "true" ]]; then echo -Ddevice=\"Samsung Galaxy J7 Prime\" -DnetworkLog=true; fi) -Dcucumber.filter.tags=\"@tmsLink=ID-16848\""
Run Code Online (Sandbox Code Playgroud)
如果我回显该命令就完全没问题:
$ echo $mvn_cmd
mvn clean test --batch-mode -Ddevice="Samsung Galaxy J7 Prime" -DnetworkLog=true -Dcucumber.filter.tags="@tmsLink=ID-16848"
Run Code Online (Sandbox Code Playgroud)
如果我运行这个:
$ $mvn_cmd
...
[ERROR] Unknown lifecycle phase "Galaxy". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id>[:<plugin-version>]:<goal>. Available lifecycle phases are: validate, initialize, generate-sources, process-sources, generate-resources, process-resources, compile, process-classes, generate-test-sources, process-test-sources, generate-test-resources, process-test-resources, test-compile, process-test-classes, test, prepare-package, package, pre-integration-test, integration-test, post-integration-test, verify, install, deploy, pre-clean, clean, post-clean, pre-site, site, post-site, site-deploy. -> [Help 1]
Run Code Online (Sandbox Code Playgroud)
但是如果我将变量的输出直接复制并粘贴到终端中,它就会完美运行:
$ mvn clean test --batch-mode -Ddevice="Samsung Galaxy J7 Prime" -DnetworkLog=true -Dcucumber.filter.tags="@tmsLink=TUF-16848"
...
[INFO]
[INFO] --- maven-surefire-plugin:3.0.0-M5:test (default-test) @ flow ---
[INFO]
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?提前致谢!
所以,问题是
eval或类似的方法来执行它。试试这个(假设你使用的是 bash):
mvn_cmd() {
local args
[[ "$CLOUD" == "true" ]] && args='-Ddevice="Samsung Galaxy J7 Prime" -DnetworkLog=true'
echo mvn clean test --batch-mode ${args?"$args"} -Dcucumber.filter.tags="@tmsLink=ID-16848"
}
Run Code Online (Sandbox Code Playgroud)
$ mvn_cmd
mvn clean test --batch-mode -Dcucumber.filter.tags=@tmsLink=ID-16848
Run Code Online (Sandbox Code Playgroud)
$ CLOUD='true'
$ mvn_cmd
mvn clean test --batch-mode -Ddevice="Samsung Galaxy J7 Prime" -DnetworkLog=true -Dcucumber.filter.tags=@tmsLink=ID-16848
Run Code Online (Sandbox Code Playgroud)
echo当您完成测试并准备好实际使用它时,请删除它。