我需要在 Mac osX 10.10 上的 .sh 脚本中使用应用程序版本,以便我可以与另一个数字进行比较,以便我可以强制更新或不更新。
到目前为止我已经有了这个(我使用 Firefox.app 作为示例)
FirefoxmdlsVersion= mdls -name kMDItemVersion /Applications/Firefox.app;
echo $FirefoxmdlsVersion
这会返回
kMDItemVersion = "34.0"
,这是朝着正确方向迈出的一步,但我只需要数字,以便我可以进行比较示例340
这是我尝试使用新变量执行的操作,但我根本没有收到错误或输出
FFV2=${FirefoxmdlsVersion//'kMDItemVersion ='}
FFV3=${FirefoxmdlsVersion:18:4}
我可能在这里走错了方向,但我看过一篇文章,但没有取得任何进展。 有人可以帮助我吗?
如果您安装了 Xcode 和开发者工具,您可以随时使用 PlistBuddy...
例如:
/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" /Applications/TextEdit.app/Contents/Info.plist
给我返回 Yosemite 下“
1.10
”的版本号。
任何应用程序的 Info.plist 文件通常在“
CFBundleShortVersionString
”键下都有一个版本。
要向列表中添加一个选项,您还可以使用
defaults
工具。
例如:
defaults read /Applications/Firefox.app/Contents/Info.plist CFBundleShortVersionString
将从 Firefox 的 Info.plist 文件中输出
CFBundleShortVersionString
条目的值,例如:74.0
我更喜欢使用
defaults
命令,因为使用它没有任何前提条件,而且命令非常简单。
您也可以使用
tr
:
FirefoxmdlsVersion= mdls -name kMDItemVersion /Applications/Firefox.app | tr -d ".";
产生
3405
(从 Firefox 34.0.5 开始)
请在 MAC 终端中尝试以下命令
system_profiler SPApplicationsDataType |grep "Application Name" -A 8
外壳:
plutil -p /Applications/Firefox.app/Contents/Info.plist | awk '/CFBundleShortVersionString/ {print substr($3, 2, length($3)-2)}'
或者Python:
import plistlib
with open('/Applications/Firefox.app/Contents/Info.plist', 'rb') as f:
plistlib.load(f)['CFBundleShortVersionString']
cat /Applications/Firefox.app/Contents/Info.plist | grep -A1 CFBundleShortVersionString | grep string | sed 's/<[^>]*>//g'
这将进入 Firefox 的
Info.plist
并返回捆绑包的版本号。它所做的最后一件事是从版本周围删除标签以获得干净的输出。