从命令行获取 OSX 代号

lvi*_*ani 8 osx

有没有办法从命令行获取 OSX 代号(即 Yosemite、El Capitan 等)?我不是在寻找版本信息(例如

sw_vers -productVersion
Run Code Online (Sandbox Code Playgroud)

) 这给出了 10.10 等等 谢谢!

rub*_*ils 5

我确信必须有一种更简单、更可靠的方法,但至少您可以sed通过使用grepwith -o(仅打印匹配项)和-E(扩展正则表达式)来完全消除管道:

grep -oE 'SOFTWARE LICENSE AGREEMENT FOR OS X.*[A-Z]' '/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf'
Run Code Online (Sandbox Code Playgroud)

但是,这也会返回SOFTWARE LICENSE AGREEMENT FOR OS X输出的一部分。如果你只想要代号,你可以将它传递给 sed,但它不需要任何使用-EBSDsed臭名昭著的可怕标志的反向引用:

grep -oE 'SOFTWARE LICENSE AGREEMENT FOR OS X.*[A-Z]' '/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf' | sed "s/SOFT.*OS X //"
Run Code Online (Sandbox Code Playgroud)

就个人而言,我更喜欢这种awk方法:

grep -oE 'SOFTWARE LICENSE AGREEMENT FOR OS X.*[A-Z]' '/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf' | awk -F 'OS X ' '{print $NF}'
Run Code Online (Sandbox Code Playgroud)

awk溶液:

awk '/SOFTWARE LICENSE AGREEMENT FOR OS X/' '/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf' | awk -F 'OS X ' '{print $NF}' | awk '{print substr($0, 0, length($0)-1)}'
Run Code Online (Sandbox Code Playgroud)

(我确信有一种方法可以在不通过管道连接到额外的 awk 进程的情况下做到这一点,但我不是专业人士。)

  • 至少在 macOS Sierra 中,您需要从中删除“OS X”部分,因为该行现在显示为“macOS Sierra 的软件许可协议”。不过幸运的是文件名保持不变。 (2认同)