• 通过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不熟悉的小白而言。

  • 相关阅读:
    完全卸载vscode
    php伪静态
    java安装
    Vue中Form表单验证无法消除验证问题
    涂鸦移动一面
    cider 二面
    2022华为机试题目
    解决升级系统导致的 curl: (48) An unknown option was passed in to libcurl
    Centos7修改默认启动级别(命令行,图形切换)
    XGBoost算法原理
  • 原文地址:https://www.cnblogs.com/ljhoracle/p/6277064.html
Copyright © 2020-2023  润新知