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

1

¿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 escribirlo con el comando defaults write . Aún 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.

    
pregunta sorin 11.09.2012 - 16:52

3 respuestas

6

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

plutil -convert binary1 test.plist

Modifica los archivos en su lugar por defecto. Puede especificar un archivo de salida diferente con -o o imprimir en la salida estándar con -o - .

    
respondido por el user495470 11.09.2012 - 17:47
0

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

Y se puede crear en una ruta particular 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 que plist puede convertirlo a JSON).)

También se puede usar defaults import para crear un nuevo archivo plist binario, ya sea defaults import <domain> - que le permite (a través de stdin) usar cualquiera de las sintaxis anteriores (o defaults import <domain> pathToExistingPlist , asumiendo que el plist al que se hace referencia es en sí mismo un archivo binario ).

Finalmente, se puede usar defaults export en un archivo existente, asumiendo que se expresa como XML o la lista de propiedades ASCII (u otra lista binaria).

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

Este último es similar al comportamiento del comando plutil en la respuesta de @ user495470, excepto que solo se copiará en su lugar si especifica una ruta en el segundo argumento que conduce al mismo archivo al que se hace referencia en el primero ( dominio).

Con la excepción de la última sintaxis export (que crea un <dict> vacío al encontrar un tipo no dictado en la raíz), para cualquiera de los anteriores, se dan errores al intentar cualquier cosa excepto un dict en la raíz.

    
respondido por el Brett Zamir 13.06.2018 - 11:25
-2

Este fragmento de bash resolvió mi problema:

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

Sin embargo, debo advertir a los demás que OS X 10.8 no parece estar cargando el archivo.

    
respondido por el sorin 11.09.2012 - 17:17

Lea otras preguntas en las etiquetas