bash - 将 info.plist 中的版本替换为 Azure 管道的 bash 脚本
问题描述
我想创建一个 bash 脚本,用管道变量中的一个替换 info.plist 版本。
为此,我从简单的脚本开始:
version="201.20108.2"
build="0"
input="info.plist"
isbundle=0
isbuild=0
linenum=0
bundlelinenum=0
buildlinenum=0
while IFS= read -r line;
do
linenum=$((linenum+1))
if [[ $line == *"CFBundleShortVersionString"* ]]; then
isbundle=1
elif [[ $line == *"CFBundleVersion"* ]]; then
isbuild=1
elif [[ $isbundle == 1 ]]; then
bundlelinenum=$linenum
isbundle=0
elif [[ $isbuild == 1 ]]; then
buildlinenum=$linenum
isbuild=0
fi
echo $linenum
done < $input
sed -i '${bundlelinenum}s/.*/<string>$version/' $input
由于CFBundleVersion
和CFBundleShortVersionString
在单独的行上,然后在它们之后是版本号,我想用 $version 和 $buildnumber 的版本更新该行
info.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
...
<key>CFBundleShortVersionString</key>
<string>17.2005.0</string>
<key>CFBundleVersion</key>
<string>103</string>
</dict>
</plist>
并且必须像:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleShortVersionString</key>
<string>201.20108.2</string>
<key>CFBundleVersion</key>
<string>0</string>
</dict>
</plist>
如何做到这一点?
解决方案
使用 Bourne shell,单引号内的变量不会被替换。使用双引号:
sed -i "${bundlelinenum}s/.*/<string>$version/" "$input"
您可能也希望关闭</string>
:
sed -i "${bundlelinenum}s/>.*</>$version</" "$input"
推荐阅读
- scala - Slick中插入行的条件插入返回选项
- python - 如果您有两种不同的格式,如何将列更改为一种日期格式?
- nginx - 使用第 4 层 nginx 负载均衡器的多个站点
- docker - 尝试从应用程序连接到数据库时,MariaDB Docker 错误 2002
- python - 尽管使用正确,为什么我的斜杠命令不显示?
- angular - 将 Dialogflow v2 与 Angular 11 集成
- javascript - 从 ES6 中的另一个数组中过滤数组
- idris - Idris 中的异构键/值收集
- karate - 空手道和报告门户 IO 集成
- node.js - 我应该为多个文件创建多个 node_modules 文件夹还是使用一个?