macos - Edición de archivo plist usando shell script
scripting pkgbuild (7)
He utilizado pkgbuild para crear un archivo de lista de propiedades de componentes predeterminado. El archivo se ve como:
<?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">
<array>
<dict>
<key>BundleHasStrictIdentifier</key>
<true/>
<key>BundleIsRelocatable</key>
<true/>
<key>BundleIsVersionChecked</key>
<true/>
<key>BundleOverwriteAction</key>
<string>upgrade</string>
<key>RootRelativeBundlePath</key>
<string>MyApp.app</string>
</dict>
</array>
</plist>
Quiero modificar este archivo usando shell script. Intenté usar la escritura por defecto pero no hizo nada.
¿Cuál es la forma de hacerlo? (Por ejemplo: quiero establecer BundleIsRelocatable en false)
La última respuesta de Phil-CB here debería ser útil.
Para uso de cuerdas
plutil -replace NameOfProperty -string "yourNewValue" plistFileName.plist
También:
plutil -replace BundleIsRelocatable -bool false plistfilename.plist
Un poco tarde, pero para el registro, solo necesita especificar la ruta absoluta Y agregar la extensión .plist al nombre de archivo. Si está ejecutando su script en el mismo directorio que el archivo plist, su caso se traduciría a:
defaults write $PWD/YourPlistFilename.plist BundleIsRelocatable -bool false
Usando PlistBuddy, un sencillo tutorial AQUÍ.
/usr/libexec/PlistBuddy -c "Set :BundleIsRelocatable bool false" plistfilename.plist
Puede ejecutarse como UNA línea de comando para actualizar la clave / valor. Lo uso para actualizar CFBundleVersion
general, que se puede encontrar en esta publicación .
Utilice PlistBuddy !
Muy simple y directo. Ejemplo:
/usr/libexec/PlistBuddy ComponentPropertyList.plist
Command: Set :0:BundleIsRelocatable false
Command: save
Saving...
Command: exit
¡Eso es! Ahora BundleIsRelocatable es falso: D
Utilizando sed
:
sed -i '''' ''/<key>BundleIsRelocatable</{n;s/true/false/;}'' file.plist
Si el plist no es XML, ejecute plutil -convert xml1 file.plist
.