Bash脚本逐行书写mvn参数报command not found错误解决
报错原因
Bash 默认以换行符作为单条命令的结束判定标识,未加续接标记直接将mvn命令的参数拆分到独立新行时,Shell 会将第一行的mvn -Pcommon,coverage识别为完整命令单独执行,后续每一行的内容都会被当作独立的新命令解析,因此触发「command not found」类报错。
修正方案
长Shell命令拆分多行书写时,需要在除最后一行外的每一行末尾添加反斜杠\作为行续接标记,注意反斜杠必须是该行的最后一个字符,后面不能夹带空格、注释等内容,否则续接逻辑会失效。
修正后的可正常执行的脚本代码如下:
mvn -Pcommon,coverage \ clean \ org.jacoco:jacoco-maven-plugin:prepare-agent \ install \ -Dmaven.test.failure.ignore=true \ -Dclient.version=0.2-SNAPSHOT \ -Djacoco.outputDir=${WORKSPACE}/target
优化建议
- 续接换行后的参数可以添加统一缩进对齐,不会影响命令执行逻辑,同时能大幅提升长命令的可读性,示例:
mvn -Pcommon,coverage \ clean \ org.jacoco:jacoco-maven-plugin:prepare-agent \ install \ -Dmaven.test.failure.ignore=true \ -Dclient.version=0.2-SNAPSHOT \ -Djacoco.outputDir=${WORKSPACE}/target
- 写完脚本后可以先执行
bash -n myBuildAndJacoco.sh做语法校验,确认没有语法问题再正式执行。
内容的提问来源于stack exchange,提问作者Alexei
相关产品推荐
相关产品推荐

