bash - 包含 git 命令的 Bash 脚本在与 perl 一起使用时表现不同
问题描述
我编写了一个脚本,用于替换包含此格式字符串的文件中版本号的最后 3 位数字
“版本全部:255.24.788”
脚本有 2 种模式:常规模式和高级模式。常规模式只是进行必要的更改,将文件添加到 git 并提交它们。高级版本创建一个分支来进行这些更改,修改文件,添加,提交,然后返回到原始工作分支。
我在运行脚本时观察到一个奇怪的行为。该脚本在第一次运行时有效,但在第二次运行时,它会停止提交结果并尝试更改分支,从而导致合并冲突。我不明白为什么脚本只能运行奇数次(第一次、第三次、第五次)而运行偶数次(第二次、第四次、第六次)时会失败。
我尝试更改变量的语法并用简单的替换 perl 调用
echo "test" > file1.txt
出于调试目的,它似乎工作正常。重新添加 perl 命令时,脚本似乎恢复了其奇怪的行为。
#!/bin/bash
# This script replaces last 3 digits of a version number in a file
# There are 2 modes for the script
# 1. Regular - no flag needed, requires 1 argument: a version number
# 2. Advanced - flag "-a" needs to be used followed by 3 arguments: version number, push repo name, remote repo name.
advanced_script=false
version="none"
if [ "$1" = "-a" ] ; then
advanced_script=true
fi
if [ "$advanced_script" = true ] ; then
if [ $# -ne 4 ] ; then
echo -e "ERROR: Please supply the following 3 arguments and try again.\n"
echo -e " 1. New version number\n"
echo -e " 2. Push repository name\n"
echo -e " 3. Remote repository name\n"
exit 1
fi
version="$2"
else
if [ $# -ne 1 ] ; then
echo -e "ERROR: Please supply version number and try again.\n"
exit 1
fi
version="$1"
fi
old_version_full="version-all:255.24.788"
old_version=${old_version_full##*all:}
new_version=${old_version%.*}
new_version+=".${version}"
current_branch=$(git branch | grep \* | cut -d ' ' -f2)
commit_string="Bump the version to $version"
if [ "$advanced_script" = true ] ; then
local_branch="new_$version"
remote_master="$4/master"
git stash
git checkout -b "$local_branch" "$remote_master"
fi
perl -i -pe"s/${old_version}/${new_version}/g" file1.txt
perl -i -pe"s/${old_version}/${new_version}/g" file2.txt
git add file1.txt
git add file2.txt
git status
git commit -m "$commit_string"
if [ "$advanced_script" = true ] ; then
git push "$3"
git checkout "$current_branch"
git stash apply
fi
解决方案
问题在于 perl 调用中使用的正则表达式模式。更改它以下行已解决问题:
perl -i -spe's/\Q$o/$n/g' -- -o="$old_version" -n="$new_version" file1.txt file2.txt
感谢@ikegami的解决方案
推荐阅读
- ios - 封装核心数据对象
- assembly - dos系统初始化中的汇编语言编程问题
- c# - 如何在单个查询中执行多个插入语句?
- excel - VBA:将不同变量的值放在一行单元格中
- python - 当我拥有所需的 DLL 时,为什么会出现此导入错误?
- python - Python - Google 自然语言处理 API 返回 HttpError 502 bad gateway
- macos - 由于 Anaconda 导致 R Jupyter Notebook 出现内核错误?
- javascript - 如何对 HTML 表格的 td 元素进行颜色编码
- google-cloud-platform - E: 列表文件 /etc/apt/sources.list.d/google-cloud-sdk.list (Suite) 中的错误条目 7 E: 无法读取源列表
- javascript - Firebase 数据库参考快照未返回任何数据