Shell脚本中执⾏命令参数带空格
事情的背景很简单、最终解决⽅案也很简单,但是,但是解决的过程可是苦了!
此时百度、⾕歌都没好使,不过问题最终还是得以解决。
下⾯先还原⼀下需求场景:
1、有⼀个 springboot 的 jar 程序 demo.jar
shell最简单脚本
2、通过接收外部参数来覆盖内部 properties 配置中 key 为 message 的值
3、shell 中直接执⾏命令 java -jar -Dmessage="shanhy hello world" demo.jar 正常,但是实际的需求是其中的参数可以填写多个,且不固
定! 总之实际要求是下⾯的脚本内容(⽤变量的⽅式)
#!/bin/bash
export MSG="shanhy hello world"
export JAVA_OPTS="$JAVA_OPTS -Dmessage='$MSG'"
java -jar $JAVA_OPTS demo.jar
这段脚本,咋⼀看似乎没什么问题,但是实际执⾏起来是错误的,因为空格会截断命令!
期间使⽤了好多种拼接的⽅法,包括使⽤ \ 转译 " 等等。
过程就不赘述了,最终解决问题正确脚本内容如下:
#!/bin/bash
export MSG="shanhy hello world"
export JAVA_OPTS="$JAVA_OPTS -Dmessage='$MSG'"
echo"java -jar $JAVA_OPTS demo.jar"|sh
通过脚本可以看出,使⽤ echo 输出脚本来达到⾃动执⾏的⽬的,⼀种很好的变通⽅式。
上⽂⽤⽰例的⽅式模拟了需求场景并进⾏了解决,其实本⽂案例的真实需求是这样的:
业务微服务配置⽂件中的 spring.datasource.validation-query 需要在 jar 包启动服务的时候传参提供,
⽽启动⽂件是⼀个通⽤且固定的startup.sh ⽂件,该⽂件内部仅接收 JAVA_OPTS 参数,所以 JAVA_OPTS=$JAVA_OPTS -Dspring.datasource.validation-query=SELECT 1 FROM DUAL 是在系统环境变量中配置的。
如果你还有其他更好的办法,欢迎留⾔赐教。
(END)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。