使用PlistBuddy向plist字符串字段追加内容时命令报错,如何解决?
解决PlistBuddy追加plist字符串的问题
你遇到的报错是因为bash把$(STH)当成了命令替换——它会尝试执行名为STH的命令,而这个命令显然不存在,所以才会提示"command not found"。要实现给plist字段追加字符串的需求,正确的思路是先读取原字段的值,拼接新内容后再写回去,具体步骤如下:
1. 读取原字段的值
首先用PlistBuddy的Print命令获取目标字段的当前值,保存到一个shell变量中:
original_value=$(/usr/libexec/PlistBuddy -c "Print someentryinplist" your_plist_file.plist)
这里把your_plist_file.plist换成你实际的plist文件路径,someentryinplist换成目标字段的路径(比如如果是嵌套字段,可能是CFBundleDisplayName或者Root/SomeSubKey)。
2. 拼接新内容并写回plist
接着把原变量和要追加的字符串拼接,再用Set命令写回去:
/usr/libexec/PlistBuddy -c "Set someentryinplist ${original_value}-sometext" your_plist_file.plist
完整示例
假设你的plist文件是Info.plist,要修改的字段是CFBundleName,完整命令如下:
# 读取原值 original_name=$(/usr/libexec/PlistBuddy -c "Print CFBundleName" Info.plist) # 追加内容并写入 /usr/libexec/PlistBuddy -c "Set CFBundleName ${original_name}-sometext" Info.plist
额外注意事项
- 如果目标字段可能不存在,你可以先判断一下,用
Add命令替代Set(如果字段不存在的话),比如:if ! /usr/libexec/PlistBuddy -c "Print someentryinplist" your_plist_file.plist >/dev/null 2>&1; then /usr/libexec/PlistBuddy -c "Add someentryinplist string sometext" your_plist_file.plist else original_value=$(/usr/libexec/PlistBuddy -c "Print someentryinplist" your_plist_file.plist) /usr/libexec/PlistBuddy -c "Set someentryinplist ${original_value}-sometext" your_plist_file.plist fi - 如果原字段的值包含空格或特殊字符,记得给变量加上引号:
/usr/libexec/PlistBuddy -c "Set someentryinplist \"${original_value}-sometext\"" your_plist_file.plist
内容的提问来源于stack exchange,提问作者kol23
相关产品推荐
相关产品推荐

