![使用 PlistBuddy (osx) 在 plist 中查找条目](https://linux22.com/image/1511456/%E4%BD%BF%E7%94%A8%20PlistBuddy%20(osx)%20%E5%9C%A8%20plist%20%E4%B8%AD%E6%9F%A5%E6%89%BE%E6%9D%A1%E7%9B%AE.png)
我尝试在 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”。