Lectura de valores de diccionarios anidados plist en script de shell


10

Tengo un archivo plist y estoy interesado en obtener valores de diccionarios anidados mediante el script de shell. Aquí está la estructura de mi archivo plist:

 <dict>
   <key>Countries</key>
    <dict>
        <key>USA</key>
        <dict>
           <key>Capital</key>
           <string>Washington DC</string>
           <key>Continent</key>
           <string>North America</string>
        </dict>
           <key>Italy</key>
        <dict>
           <key>Capital</key>
           <string>Rome</string>
           <key>Continent</key>
           <string>Europe</string>
        </dict>
    </dict>
 </dict>

Estoy interesado en obtener el valor asignado a la tecla "Capital" si el usuario proporciona un nombre de país.
Por ejemplo, si ejecuto el siguiente comando, obtengo los datos completos en el diccionario "Países".

defaults read "/Users/sameerp/Downloads/data" Countries  2>&1   

Me sale el siguiente resultado:

{
Italy =     {
    Capital = Rome;
    Continent = Europe;
};
USA =     {
    Capital = "Washington DC";
    Continent = "North America";
};
}

¿Cómo modifico el comando anterior para pasarle la tecla "País" (EE. UU., Por ejemplo) y obtener el valor de la tecla "Capital"?


Entonces, ¿cuál es tu pregunta? ¿Qué tienes hasta ahora? No nos estás pidiendo que escribamos el guión para ti, ¿verdad?
terdon

@terdon: No le pido a nadie que escriba el guión por mí. Quería saber si hay una forma directa de acceder al valor de una clave en el diccionario anidado utilizando el comando "lectura predeterminada".
smokinguns

Respuestas:


13

los valores predeterminados no pueden hacer esto sin mucho desorden, pero PlistBuddy:

/usr/libexec/PlistBuddy -c "print :Countries:USA:Capital" /Users/sameerp/Downloads/data.plist
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.