1

Я пытаюсь найти на компьютере Mac, если у текущего пользователя включена поддержка документов iCloud. Я нашел plist, где это находится (MobileMeAccounts.plist), но я мог бы использовать некоторую помощь с синтаксисом plistbuddy для нацеливания вниз в дереве.

Вот часть сценария, который у меня есть:

#!/bin/bash

# Purpose: Grab iCloud Document Status

plistBud="/usr/libexec/PlistBuddy"

if [[ -e "/Users/*loggedInUser*/Library/Preferences/MobileMeAccounts.plist" ]]; then

iCloudStatus=`$plistBud -c "print :Accounts:Services:MOBILE_DOCUMENTS" /Users/$loggedInUser/Library/Preferences/MobileMeAccounts.plist`
else

iCloudDocuments="Not Enabled"

fi

echo "$iCloudStatus"

Я специально ищу следующий код, чтобы быть правдой:

<key>Enabled</key>
<true/>

Вот этот список. Если вы прокрутите вниз, вы увидите "MOBILE_DOCUMENTS" с его включением:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Accounts</key>
<array>
    <dict>
        <key>AccountAlternateDSID</key>
        <string>99999999</string>
        <key>AccountDSID</key>
        <string>999999</string>
        <key>AccountDescription</key>
        <string>iCloud</string>
        <key>AccountID</key>
        <string>*****@gmail.com</string>
        <key>AccountUUID</key>
        <string>9999999</string>
        <key>DisplayName</key>
        <string>User Name</string>
        <key>LoggedIn</key>
        <true/>
        <key>Services</key>
        <array>
            <dict>
                <key>Name</key>
                <string>CLOUDDESKTOP</string>
                <key>ServiceID</key>
                <string>com.apple.Dataclass.CloudDesktop</string>
                <key>status</key>
                <string>active</string>
            </dict>
            <dict>
                <key>Name</key>
                <string>FAMILY</string>
                <key>ServiceID</key>
                <string>com.apple.Dataclass.Family</string>
                <key>showManageFamily</key>
                <true/>
            </dict>
            <dict>
                <key>Enabled</key>
                <true/>
                <key>Name</key>
                <string>MOBILE_DOCUMENTS</string>
                <key>ServiceID</key>
                <string>com.apple.Dataclass.Ubiquity</string>
                <key>apsEnv</key>
                <string>production</string>
                <key>authMechanism</key>
                <string>token</string>
                <key>url</key>
                <string>https://p48-ubiquity.icloud.com:443</string>
                <key>wsUrl</key>
                <string>https://p48-ubiquityws.icloud.com:443</string>
            </dict>

1 ответ1

0

Ты почти там.

Хитрость в том, что вы должны указать, какой объект вы хотите в каждом массиве. Добавьте этот индекс в путь XML, и все в порядке.

Чтобы получить список элементов в массиве:

/usr/libexec/PlistBuddy -c "print :Accounts:0:Services" ~/Library/Preferences/MobileMeAccounts.plist

В моем случае MOBILE_DOCUMENTS - это первый элемент, поэтому он имеет индекс 0 (второй элемент будет индексом 1, индексом третьего элемента 2 и т.д.).

Это работает для меня:

/usr/libexec/PlistBuddy -c "print :Accounts:0:Services:0:Enabled" ~/Library/Preferences/MobileMeAccounts.plist

даст "ложь" или "правда".

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .