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

目标:通过读取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" ];then
if [ -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" ];then
if [ -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.0
the 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不熟悉的小白而言。

通过Shell脚本读取properties文件中的参数时遇到\r换行符的问题的更多相关文章

  1. Mac下通过shell脚本修改properties文件

    通过shell脚本替换属性文件中的某行记录 假设有如下属性文件 demo.properties user.name=test user.password=123456 ................ ...

  2. Java中读取txt文件中中文字符时,出现乱码的解决办法

    这是我写的一个Java课程作业时,遇到的问题. 问题描述: 我要实现的就是将txt文件中的内容按一定格式读取出来后,存放在相应的数组. 我刚开始运行时发现,英文可以实现,但是中文字符就是各种乱码. 最 ...

  3. shell 脚本sed替换文件中某个字符串

    有些大文件,特别的大.有几百兆,甚至更大. 用文本编辑器打开十分的费劲,电脑都卡死了. 想替换其中的字符串,很麻烦. 这个时候有了shell,简直强大到爆炸! # du -h user.sql 304 ...

  4. java读取properties文件中参数值

    在类文件中加入代码: //config.properties.sysInfo //sysInfo.properties在文件夹的路径为/src/config/properties/sysInfo.pr ...

  5. 读取yml 文件中的参数

    第一种方法: yml 文件: spring: main: allow-bean-definition-overriding: true cloud: consul: host: 192.168.1.1 ...

  6. 注解形式读取properties文件中的属性

    1.spring.xml中加入(多个properties 用逗号隔开)  <context:property-placeholder location="classpath:jdbc. ...

  7. maven src/test/resources 下的logback-test.xml 读取 properties文件中的key-value值

    <profiles>        <profile>            <id>test-cd</id>            <prope ...

  8. shell 脚本,提取文件中的内容

    使用awk.cut.sed.if.while 等 awk.cut.sed还是很重要的 这是后来修改的,可以完成 #!/bin/bash #conver formatFILE=mobile_dpi.ru ...

  9. shell脚本,如果文件中的第一列有相同的,就把相同的那些行的其他字段相加

    命令:awk '{a[$1]+=$2}{b[$1]+=$3}END{for(i in a){print i,a[i],b[i]}}'

随机推荐

  1. NHibernate系列

    NHibernate系列 写在前面 这篇总结本来是昨天要写的,可昨天大学班长来视察工作,多喝了点,回来就倒头就睡了,也就把这篇总结的文章拖到了今天. nhibernate系列从开始着手写,到现在前后耗 ...

  2. atitit.ajax bp dwr 3.该票据安排使用的流量汇总 VO9o.....

    atitit.ajax bp dwr 3.该票据安排使用的流量汇总 VO9o..... 1. 安装配置 1 1.1. 下载  dwr.jar 1M 1 1.2. 配置注解方式..web.xml 1 2 ...

  3. openSUSE13.1安装Nodejs并更新到最新版

    软件源中直接安装Nodejs即可 sudo zypper in nodejs 查看nodejs版本 sincerefly@linux-utem:~> node --version v0.10.5 ...

  4. 安装Windows8.1操作系统 - 初学者系列 - 学习者系列文章

    Windows 8这款操作系统是微软最新的操作系统.虽然微软做了推广,但是据消息称市场份额暂时没那么高.下面就对该操作系统的安装进行简要介绍. 1.  将光盘装入光驱,设置BIOS中光驱启动,启动计算 ...

  5. SaaS模式和实现思路

    EFW框架开发的系统支持SaaS模式和实现思路 回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dAD ...

  6. 用Inno Setup制作WEB程序安装包

    原文 用Inno Setup制作WEB程序安装包 最近做了一个WEB程序的安装包,我把制作的过程做个介绍,贴出源码给大家做个参考 看看inno 的脚本 [Setup] AppCopyright=tes ...

  7. 探索Android该Parcel机制上

    一.先从Serialize说起 我们都知道JAVA中的Serialize机制.译成串行化.序列化……,其作用是能将数据对象存入字节流其中,在须要时又一次生成对象.主要应用是利用外部存储设备保存对象状态 ...

  8. bootstrap-paginator 分页插件笔记

    [MVC]bootstrap-paginator 分页插件笔记   bootstrap-paginator基于bootstrap框架,使用起来非常简单.官网:http://harttle.github ...

  9. Hudson安装配置、部署应用及分析

    一.部署环境 机器:一台linux虚机,内存1G,操作系统CentOS release 5.6,硬盘100G. 实验应用:乐学方舟后台部署(非正式环境) 应用环境:apache-tomcat-7.0. ...

  10. 面试必须要知道的SQL语法,语句

    面试必须要知道的SQL语法,语句 收藏 asc 按升序排列desc 按降序排列下列语句部分是Mssql语句,不可以在access中使用.SQL分类: DDL—数据定义语言(Create,Alter,D ...