zoukankan      html  css  js  c++  java
  • 通过Shell脚本读取properties文件中的参数时遇到 换行符的问题

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

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

    遇到的问题:通过shell脚本读取pom.properties文件时,由于其key-value格式分行存储,在linux中获取到的value值最后有一个 参数(可以通过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的值后面有一个 ,在输出的时候echo函数自己处理掉了,所以在输出的结果中看不到换行的效果,version的值也是一样,最后也有一个 ,找到问题的所在以后,就去查找如何去掉变量后面的 方法,这时sed函数便出现在眼前,使用也很简单,改进后的shell脚本如下:

    JAR=""
    if [ -z "$JAR" ];then
      if [ -f "$APP_HOME/pom.properties" ];then
             . $APP_HOME/pom.properties
              ver=$(echo $version | sed 's/
    //')
              art=$(echo $artifactId | sed 's/
    //')
           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不熟悉的小白而言。

  • 相关阅读:
    Unity 深入解析合批(Batching)原理及失败原因
    ILRuntime作者林若峰分享:优化 Dots URP 性能优化 (干货满满)
    unity Mesh绘制网格线
    Shder基础知识
    UnityEditor工具链开发的常用小技巧与示例
    磁盘文件分析清理工具
    波函数坍塌算法(Wave Collapse Function)实现随机地图
    视觉小说 文字游戏引擎 ink 可配合Unity
    c# 字典键值排序
    unity文件夹复制
  • 原文地址:https://www.cnblogs.com/ljhoracle/p/6277064.html
Copyright © 2011-2022 走看看