使用 PlistBuddy (osx) 在 plist 中查找条目

使用 PlistBuddy (osx) 在 plist 中查找条目

我尝试在 Mac 电脑上查找当前用户是否启用了 iCloud Documents。我找到了它所在的 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/>

这是 plist。如果你向下滚动,你会看到已启用的“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

你快到了。

诀窍在于您必须指定每个数组中所需的对象。在 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

将返回“false”或“true”。

相关内容