shell 解析properties_通过Shell脚本读取properties文件中的参数时遇到\r换行符的问题...

本文讲述了在Linux环境下,通过Shell脚本读取pom.properties文件时遇到的因 换行符导致的jar包名称拼接错误问题。通过在脚本中使用sed命令去除变量后面的 ,成功解决了这个问题,确保了服务的正常启动。
摘要由CSDN通过智能技术生成

今天在编写微服务程序启动脚本的时候,遇到一个比较奇葩的问题,下面给出具体描述:

目标:通过读取maven插件打包时生成的pom.properties文件,获取里面的应用名称和应用版本号,然后拼接得到serviceName-version.jar格式的jar包名称,从而通过java -jar -xx..  jarPath的方式启动

遇到的问题:通过shell脚本读取pom.properties文件时,由于其key-value格式分行存储,在linux中获取到的value值最后有一个\r参数(可以通过sh -x  app.sh查看到),导致拼接到的jarName跟预期的不一致

pom.properties中的内容如下:

version=1.0

groupId=project.parent

artifactId=com.lxk.cms.admin.service

最初写的读取pom.properties中参数拼接JAR的shell脚本如下:

JAR=""

if [ -z "$JAR"];thenif [ -f "$APP_HOME/pom.properties"];then

.$APP_HOME/pom.properties

echo"artifactId=$artifactId"echo"version=$version"JAR="$artifactId-$version.jar"fi

fi

echo"the app jar name is: $JAR"

这样输出的结果如下:

artifactId=com.lxk.cms.admin.service

version=1.0

.jar app jar name is :com.lxk.cms.admin.service

半天也搞不懂为啥会有这样的输出结果,网上查找相关的shell编程资料,读取properties文件都是获取里面的参数变量值,很少有遇到拼接时这种问题的,最后在一位shell老司机的博客里面看到可以通过在执行脚本的命令中加入-x参数来获取详细的执行过程,照着这个方法执行,果然看到了在第一次echo输出artifactId的值后面有一个\r,在输出的时候echo函数自己处理掉了,所以在输出的结果中看不到换行的效果,version的值也是一样,最后也有一个\r,找到问题的所在以后,就去查找如何去掉变量后面的\r方法,这时sed函数便出现在眼前,使用也很简单,改进后的shell脚本如下:

JAR=""

if [ -z "$JAR"];thenif [ -f "$APP_HOME/pom.properties"];then

.$APP_HOME/pom.properties

ver=$(echo $version | sed 's/\r//')

art=$(echo $artifactId | sed 's/\r//')

JAR="$art-$ver.jar"fi

fi

echo"the app jar name is :$JAR"

改进后输出的结果如下:

artifactId=com.lxk.cms.admin.service

version=1.0the app jar name is:com.lxk.cms.admin.service-1.0.jar

这样就成功了解决了获取jarName的问题,之后通过

$JAVA_PATH $JAVA_OPTS -Dmx.config.path="$APP_HOME/etc/" -jar "$APP_HOME/lib/$JAR"

便可以成功启动我们的服务了,希望对遇到这类问题的童鞋有帮助,问题很简单,但是发现问题确实比较难,尤其对shell不熟悉的小白而言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值