2 votos

¿Cómo crear un archivo plist binario desde la línea de comandos en OS X?

Estoy buscando una solución para crear un archivo plist binario desde la línea de comandos en OS X?

Quiero crear el ~/.MacOSX/environment.plist y configurar el PATH allí.

Sé que este archivo plist tiene que estar en formato binario y sé cómo escribir en él utilizando el defaults write de mando. Aun así, necesito crear el archivo antes de hacer esto, y crear un archivo vacío no funciona.

Nota: Necesito una solución de línea de comandos.

8voto

También puedes crear una lista de propiedades XML o de estilo antiguo y convertirla con plutil:

plutil -convert binary1 test.plist

Modifica los archivos en el lugar por defecto. Puede especificar un archivo de salida diferente con -o o imprimir en stdout con -o - .

1voto

yogeshjoshi2011 Puntos 51

Al menos desde Mac High Sierra (10.13.4), defaults write (por ejemplo, si es de la forma defaults write com.example.test '{a = (b, 2);}' o defaults write com.example.testb "a" '(b, 2)' ) me está creando archivos binarios plist en ~/Library/Preferences/ incluso cuando el archivo aún no ha sido creado.

Y se puede crear en una ruta determinada intercambiando un dominio con la ruta de archivo deseada, por ejemplo

defaults write "/users/brett/Desktop/com.example.testc"  "a" '(b, 2)'

La sintaxis XML también funciona:

defaults write "/users/brett/Desktop/com.example.testc" '<dict><key>a</key><array><string>b</string><string>2</string></array></dict>'

(El suministro de JSON no funciona (a pesar de plist poder convertirlo en JSON).

También se puede utilizar defaults import para crear un nuevo archivo binario plist, ya sea defaults import <domain> - que le permite (a través de stdin) utilizar cualquiera de las sintaxis anteriores (o defaults import <domain> pathToExistingPlist (suponiendo que el plist referenciado sea a su vez un archivo binario).

Por último, se puede utilizar defaults export en un archivo existente, asumiendo que está expresado como XML o la lista de propiedades ASCII (u otro plist binario).

defaults export com.example.test1 /path/for/com.example.testcopy.plist

Esto último es similar al comportamiento del comando plutil en la respuesta de @user495470, excepto que sólo copiará en su lugar si se especifica una ruta en el segundo argumento que lleve al mismo archivo que el referenciado en el primero (dominio).

Con la excepción de este último export (que crea un espacio vacío). <dict> al encontrar un tipo no dict en root), para cualquiera de los anteriores, se dan errores al intentar cualquier cosa que no sea un dict en root.

-2voto

Greg Puntos 7391

Este pedazo de bash resolvió mi problema:

if [ ! -f '~/.MacOSX/environment.plist' ]; then
  mkdir -p '~/.MacOSX'
  defaults write ~/.MacOSX/environment.plist TEST_VAR 1
fi

Aun así, tengo que advertir a los demás que OS X 10.8 parece no cargar el archivo.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X