4 votes

Comment définir un tableau avec une seule commande `defaults` ?

Je veux un domaine com.apple.keyboard.modifiermapping.1452-628-0 pour contenir le tableau suivant :

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

Je peux y arriver en supprimant la valeur actuelle et en exécutant trois -array-add des commandes :

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

Quelle syntaxe puis-je utiliser pour définir le tableau en une seule commande ?


  • Si je lance le script suivant :

    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

    J'obtiens un tableau dans un tableau :

    (
            (
                    {
                HIDKeyboardModifierMappingDst = 2;
                HIDKeyboardModifierMappingSrc = 0;
            },
                    {
                HIDKeyboardModifierMappingDst = 0;
                HIDKeyboardModifierMappingSrc = 2;
            },
                    {
                HIDKeyboardModifierMappingDst = 0;
                HIDKeyboardModifierMappingSrc = 10;
            }
        )
    )
  • Si j'essaie avec -plist au lieu de -array Je reçois un Unexpected argument .

  • Si je lance le script suivant :

    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

    J'obtiens une erreur de syntaxe defaults[22044:679428] Could not parse: ... Try single-quoting it.


Nouvelle question : quelle syntaxe puis-je utiliser pour définir le tableau en une seule commande ?

4voto

grg Points 181593

-array prend des éléments de tableau individuels comme arguments individuels.

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

Les '\' sont utilisés pour que le shell attende la ligne suivante, ils peuvent donc être omis s'ils sont écrits sur une seule ligne. Vous n'avez pas besoin d'utiliser delete d'abord : contrairement à -array-add , -array remplace le tableau entier avec le nouveau contenu.

Si vous ne voulez pas procéder de cette façon, voici une alternative : vous pouvez transmettre la structure de données sous forme de chaîne. Cette méthode est plus proche des exemples de votre question et fonctionne de la même manière.

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

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X