我正在编写一个脚本来自动化在计算机实验室中设置一堆Mac的过程。
每个系统都是唯一标识的,我需要一种在多个位置修补plist文件的方法,该文件具有相同的字符串,该字符串将在脚本中从用户读取,这是一个bash脚本
原始字符串始终相同。修补字符串是可变的,具体取决于运行脚本的系统的标识。为了各种其他目的,在脚本开头从用户读取该字符串,并存储在$ macnum中。
有人可以为我提供一个简单的解决方案,可以编写脚本来执行任务吗?感谢。
答案 0 :(得分:2)
您可以在plist中使用一些唯一标识符(例如{{MACHINE_ID}}
)并使用sed
替换它:
sed -i -e 's/{{MACHINE_ID}}/'"$macnum"/g filename
答案 1 :(得分:1)
sed -i "s/plist-macnum-placeholder/$macnum/g' file ...
其中-i
表示“就地”编辑文件,而/g
表示每行进行多次替换,如果只有一行则可以删除。
答案 2 :(得分:0)
基于sed的方法strager和msw给出的工作正常如果你正在改变的plist是XML格式,但如果它是Apple的二进制格式,它可能会破坏文件格式。您可以先使用plutil将其转换为XML:
plutil -convert xml1 filename
sed -i -e "s/placeholder/$macnum/g" filename
之后,没有必要将其转换回二进制格式,因为Apple的plist框架可以互换地读取这两种格式。另一种方法是使用PlistBuddy来编辑plist的内容(尽管它需要脚本知道要设置哪些条目的值,而不是仅仅替换占位符):
/usr/libexec/PlistBuddy -c "set :oneentry 'value including $macnum where appropriate'" filename
/usr/libexec/PlistBuddy -c "set :anotherentry 'value including $macnum where appropriate'" filename
最后,您可以使用默认值执行相同的操作,但它要求您按完整路径指定.plist文件,并将.plist保留为其名称:
defaults write oneentry "value including $macnum where appropriate" /path/to/filename-without-plist
defaults write anotherentry "value including $macnum where appropriate" /path/to/filename-without-plist