Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 如何在OSX上解析'defaults read'的输出?_Macos_Git_Plist_Defaults - Fatal编程技术网

Macos 如何在OSX上解析'defaults read'的输出?

Macos 如何在OSX上解析'defaults read'的输出?,macos,git,plist,defaults,Macos,Git,Plist,Defaults,如何解析OS Xdefaults readterminal命令的输出 它似乎输出“旧”下一步plist格式;看起来像: { "Apple Global Domain" = { AppleAntiAliasingThreshold = 4; AppleCollationOrder = root; 我尝试将输出写入一个文件并使用plutil进行转换,但遇到了以下问题: > defaults read > defaults.txt > plutil -con

如何解析OS X
defaults read
terminal命令的输出

它似乎输出“旧”下一步plist格式;看起来像:

{
"Apple Global Domain" =     {
    AppleAntiAliasingThreshold = 4;
    AppleCollationOrder = root;
我尝试将输出写入一个文件并使用
plutil
进行转换,但遇到了以下问题:

> defaults read > defaults.txt
> plutil -convert xml1 defaults.txt
2014-02-02 21:29:14.856 plutil[56896:707] CFPropertyListCreateFromXMLData(): Old-style
plist parser: missing semicolon in dictionary on line 10835. Parsing will be abandoned.
Break on _CFPropertyListMissingSemicolon to debug.
defaults.txt: Property List error: Unexpected character { at line 1 / JSON error: No
value for key in object around character 28.
为什么,你问?
我希望将默认值存储在git中,以便在应用更改后保留一条记录作为更改设置和diff,但
defaults read
中的序列化似乎不是“行顺序稳定的”:字典不会以一致的顺序转储它们的键,从而导致大量的噪音。如果我可以解析
默认值读取
,我就可以通过顺序一致的序列化程序将数据输出。

你真是个幸运的家伙,就在几天前,有人在PyPi上发布了NeXTSTEP plist格式的解析器——
.

这里的脚本不是解析defaults命令的输出,而是直接读取默认值:

#!/usr/bin/swift
import Foundation

var args = CommandLine.arguments
args.removeFirst()
if let suite = args.first, let defaults = UserDefaults(suiteName: suite) {
    args.removeFirst()
    if let keyPath = args.first, let value = defaults.value(forKeyPath: keyPath) {
        print(value)
    } else {
        print(defaults.dictionaryRepresentation())
    }
}
如果将其保存为名为
dread
chmod+x dread
的文件,则可以读取应用程序的默认值并按如下方式打印:

dread com.apple.dt.Xcode IDEApplicationwideBuildSettings

由于这是一本词典,您可以使用以下方法从该词典中读取其中一个键:

dread com.apple.dt.Xcode IDEApplicationwideBuildSettings.SYMROOT


等等。

您尝试过默认导出吗? 这将输出一个二进制文件,然后可以使用plutil将该文件转换为.plist,可以转换为xml或json

#/bin/bash
f='~/Library/Preferences/com.apple.LaunchServices/com.apple.LaunchServices.secure'
x=“$(plutil-convert xml1-o-“$f”)”
j=“$(plutil-convert json-o-“$f”)”
-o-
表示:将结果打印到标准输出

$f
是plist格式的输入文件

您在读什么?@特洛伊木马用于
默认读取
终端命令的输出(我使用的是OS X 10.8和10.9)。它转储您的首选项,但看起来像是旧的NeXTSTEP plist格式,而不是像xml这样易于解析的格式。我将对问题进行编辑,以使其更清楚。我需要相同的功能来解析“/System/Library/CoreServices/pbs-dump_pboard”的输出事实上,该格式非常接近JSON,只对数组使用()而不是[],并以“;”结尾每个项,即使它是其级别中的最后一项。因此,也许可以使用现有的JSON解析器源代码,对其稍加修改,使其能够阅读本文。感谢您的建议。我尝试了
nsplist
库,但它吐在我从
默认读取的输出上
。。。我的猜测是,这个命令正在以一种看起来像NeXTSTEP plist但并不完全一致的方式格式化它的响应(因此苹果自己的
plutil
也失败了)。