Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linux-简化语义版本控制脚本_Linux_Bash_Shell - Fatal编程技术网

linux-简化语义版本控制脚本

linux-简化语义版本控制脚本,linux,bash,shell,Linux,Bash,Shell,我对应用程序组件进行了语义版本控制,这就是我更新主要版本号然后将其存储回version.txt的方式。对于一个简单的操作来说,这似乎有很多行。有人能帮我把这个剪下来吗?没有使用bc,因为我所在的docker python映像似乎没有该命令 这是从yml文件中提取的,version.txt仅包含一个主要和次要编号。1.3例如。下面的代码仅更新主编号(1)并将次编号重置为0。所以如果我在1.3上运行代码,我会得到2 - echo $(<version.txt) 1 | awk '{print

我对应用程序组件进行了语义版本控制,这就是我更新主要版本号然后将其存储回version.txt的方式。对于一个简单的操作来说,这似乎有很多行。有人能帮我把这个剪下来吗?没有使用
bc
,因为我所在的docker python映像似乎没有该命令

这是从yml文件中提取的,version.txt仅包含一个主要和次要编号。1.3例如。下面的代码仅更新主编号(1)并将次编号重置为0。所以如果我在1.3上运行代码,我会得到2

- echo $(<version.txt) 1 | awk '{print $1 + $2}' > version.txt
  VERSION=$(<version.txt)
  VERSION=${VERSION%.*}
  echo $VERSION > version.txt
  echo "New version = $(<version.txt)"
-echo$(version.txt
版本=$(VERSION.txt
echo“新版本=$(关于简单性
“Simple”和“short”不是一回事。
echo$foo
echo“$foo”
短,但它实际上做的事情多得多:它将
foo
的值在
IFS
中的字符上分开,将该拆分的每个结果作为全局表达式进行计算,然后将它们重新组合

类似地,使代码更简单——如中所述,限制它所经历的过程中的步骤数量——与缩短代码完全不是一回事


增加一个片段,而不修改其他片段
如果IFS=.read-r主rest“version.txt.$$”和&mv“version.txt.$$”version.txt
其他的
echo“错误:无法从version.txt中读取版本号”>&2
出口1
fi

递增主版本,丢弃其他版本
如果IFS=.read-r主rest“version.txt.$$”和&mv“version.txt.$$”version.txt
其他的
echo“错误:无法从version.txt中读取版本号”>&2
出口1
fi

根本原因 以上两种都是POSIX兼容的,避免依赖任何未内置到shell中的功能

  • IFS=.read-r第一秒第三关于简单性
    “Simple”和“short”不是一回事。
    echo$foo
    echo“$foo”
    短,但它实际上做的事情多得多:它将
    foo
    的值在
    IFS
    中的字符上分开,将该拆分的每个结果作为全局表达式进行计算,然后将它们重新组合

    类似地,使代码更简单——如中所述,限制它所经历的过程中的步骤数量——与缩短代码完全不是一回事


    增加一个片段,而不修改其他片段
    如果IFS=.read-r主rest“version.txt.$$”和&mv“version.txt.$$”version.txt
    其他的
    echo“错误:无法从version.txt中读取版本号”>&2
    出口1
    fi
    

    递增主版本,丢弃其他版本
    如果IFS=.read-r主rest“version.txt.$$”和&mv“version.txt.$$”version.txt
    其他的
    echo“错误:无法从version.txt中读取版本号”>&2
    出口1
    fi
    

    根本原因 以上两种都是POSIX兼容的,避免依赖任何未内置到shell中的功能



    • IFS=.read-r first second third坦白说,这不是那么多行。我最担心的不是行数,而是代码不明确的地方--
      echo$VERSION
      ,例如,会将未引用的值视为字符串拆分和全局处理的对象。一般来说,在exp可读性、健壮性和c的观念是对错误的事情进行优先排序。向我们展示文件的外观-
      version.txt
      ,假设我们需要处理
      12.43.56
      ,而不仅仅是
      12.43
      ,如果它真的存在的话。我建议将多行脚本作为单个列表项,只是为了明确起见(即,对于来自ansible或其他工具的人员,列表中的每个shell命令都由单独的shell运行)。在前面加一个破折号和空格,然后将后面的所有行缩进,以相同的缩进级别开始。坦率地说,这不是那么多行。我最担心的不是行数,而是代码不明确的地方--
      echo$VERSION
      ,例如,将未加引号的值视为字符串拆分和globbing。一般来说,以牺牲可读性、健壮性和c为代价寻找一行代码是错误的。向我们展示文件的外观-
      version.txt
      ,如果真的是这样的话,我们可能需要处理
      12.43.56
      ,而不仅仅是
      12.43
      。我建议将多行脚本作为一个单一的列表条目,只是为了明确(例如,对于来自ansible或其他工具的人员,列表中的每个shell命令都由单独的shell运行).在前面加一个破折号和空格,然后将后面的所有行缩进,以相同的缩进级别开始。它们似乎删除了最后一个点之后的所有内容。如果它们想从
      13.2.4
      转到
      14
      ,那么它就是
      echo“$(主调+1))“>version.txt
      ,因此更简单。详细的规范将使您更容易对答案充满信心。感谢您的详细答案!当我在bitbucket管道中运行此命令时:
      -IFS=.read-r major rest“version.txt”和&mv“version.txt”
      I get:
      mv:version.txt之后缺少目标文件操作数请尝试“mv--help”以获取更多信息。
      I删除了if-else语句,因为它必须全部放在bitbucket管道yml文件中的一行上,并且无法读取。如果bitbucket使用真正兼容的YAL,则AML绝对允许多行文字ML解析器,您完全可以将您的文本拆分为多行……也就是说,我的一些代码刚刚被破坏——请查看更新。它们似乎删除了最后一个点之后的所有内容。如果它们想从
      13.2.4
      转到
      14
      ,那么它只是
      echo“$(主要+1))”>version.txt
      ,因此更简单。详细的规范将使您更容易对答案充满信心。感谢您的详细答案!当我在bitbucket管道中运行此命令时:
      -IFS=.read-r major rest“version.txt”&
      
      if IFS=. read -r major rest <version.txt || [ -n "$major" ]; then
        echo "$((major + 1)).$rest" >"version.txt.$$" && mv "version.txt.$$" version.txt
      else
        echo "ERROR: Unable to read version number from version.txt" >&2
        exit 1
      fi
      
      if IFS=. read -r major rest <version.txt || [ -n "$major" ]; then
        echo "$((major + 1))" >"version.txt.$$" && mv "version.txt.$$" "version.txt"
      else
        echo "ERROR: Unable to read version number from version.txt" >&2
        exit 1
      fi