¿Cómo definir una matriz con un solo comando 'predeterminado'?

3

Quiero que un dominio com.apple.keyboard.modifiermapping.1452-628-0 contenga la siguiente matriz:

(
        {
        HIDKeyboardModifierMappingDst = 2;
        HIDKeyboardModifierMappingSrc = 0;
    },
        {
        HIDKeyboardModifierMappingDst = 0;
        HIDKeyboardModifierMappingSrc = 2;
    },
        {
        HIDKeyboardModifierMappingDst = 0;
        HIDKeyboardModifierMappingSrc = 10;
    }
)

Puedo lograrlo eliminando el valor actual y ejecutando tres comandos -array-add :

defaults -currentHost delete -g com.apple.keyboard.modifiermapping.1452-628-0
defaults -currentHost write -g com.apple.keyboard.modifiermapping.1452-628-0 -array-add '{ HIDKeyboardModifierMappingDst = 2; HIDKeyboardModifierMappingSrc = 0; }'    
defaults -currentHost write -g com.apple.keyboard.modifiermapping.1452-628-0 -array-add '{ HIDKeyboardModifierMappingDst = 0; HIDKeyboardModifierMappingSrc = 2; }'    
defaults -currentHost write -g com.apple.keyboard.modifiermapping.1452-628-0 -array-add '{ HIDKeyboardModifierMappingDst = 0; HIDKeyboardModifierMappingSrc = 10; }'
defaults -currentHost read -g com.apple.keyboard.modifiermapping.1452-628-0

¿Qué sintaxis puedo usar para definir la matriz en un solo comando?

  • Si ejecuto el siguiente script:

    defaults -currentHost delete -g com.apple.keyboard.modifiermapping.1452-628-0
    defaults -currentHost write -g com.apple.keyboard.modifiermapping.1452-628-0 -array '(
      { HIDKeyboardModifierMappingDst = 2; HIDKeyboardModifierMappingSrc = 0; },
      { HIDKeyboardModifierMappingDst = 0; HIDKeyboardModifierMappingSrc = 2; },
      { HIDKeyboardModifierMappingDst = 0; HIDKeyboardModifierMappingSrc = 10; } )' 
    defaults -currentHost read -g com.apple.keyboard.modifiermapping.1452-628-0
    

    Obtengo una matriz dentro de una matriz:

    (
            (
                    {
                HIDKeyboardModifierMappingDst = 2;
                HIDKeyboardModifierMappingSrc = 0;
            },
                    {
                HIDKeyboardModifierMappingDst = 0;
                HIDKeyboardModifierMappingSrc = 2;
            },
                    {
                HIDKeyboardModifierMappingDst = 0;
                HIDKeyboardModifierMappingSrc = 10;
            }
        )
    )
    
  • Si lo intento con -plist en lugar de -array , obtengo un Unexpected argument .

  • Si ejecuto el siguiente script:

    defaults -currentHost delete -g com.apple.keyboard.modifiermapping.1452-628-0    
    defaults -currentHost write -g com.apple.keyboard.modifiermapping.1452-628-0 -array '
      { HIDKeyboardModifierMappingDst = 2; HIDKeyboardModifierMappingSrc = 0; },
      { HIDKeyboardModifierMappingDst = 0; HIDKeyboardModifierMappingSrc = 2; },
      { HIDKeyboardModifierMappingDst = 0; HIDKeyboardModifierMappingSrc = 10; }'
    defaults -currentHost read -g com.apple.keyboard.modifiermapping.1452-628-0
    

    Recibo un error de sintaxis defaults[22044:679428] Could not parse: ... Try single-quoting it.

Nuevamente, pregunta: ¿qué sintaxis puedo usar para definir la matriz en un solo comando?

    
pregunta techraf 29.12.2016 - 12:54

1 respuesta

2

-array toma elementos de una matriz individual como argumentos individuales.

defaults -currentHost write -g com.apple.keyboard.modifiermapping.1452-628-0 -array \
  '{ HIDKeyboardModifierMappingDst = 2; HIDKeyboardModifierMappingSrc = 0; }' \
  '{ HIDKeyboardModifierMappingDst = 0; HIDKeyboardModifierMappingSrc = 2; }' \
  '{ HIDKeyboardModifierMappingDst = 0; HIDKeyboardModifierMappingSrc = 10; }'

Los ‘\ 'se utilizan para mantener el shell esperando la siguiente línea, por lo que se pueden omitir si se escriben en una línea. No es necesario usar primero delete : a diferencia de -array-add , -array reemplaza toda la matriz con el nuevo contenido.

Si no quieres hacerlo de esta manera, aquí hay una alternativa: puedes pasar la estructura de datos como una cadena. Esto está más cerca de los ejemplos en su pregunta y funciona de la misma manera.

defaults -currentHost write -g com.apple.keyboard.modifiermapping.1452-628-0 '(
  { HIDKeyboardModifierMappingDst = 2; HIDKeyboardModifierMappingSrc = 0; },
  { HIDKeyboardModifierMappingDst = 0; HIDKeyboardModifierMappingSrc = 2; },
  { HIDKeyboardModifierMappingDst = 0; HIDKeyboardModifierMappingSrc = 10; } )' 
    
respondido por el grg 29.12.2016 - 13:08

Lea otras preguntas en las etiquetas