如何在 osx 上的终端中返回应用程序版本

问题描述 投票:0回答:6

我需要在 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}

我可能在这里走错了方向,但我看过一篇文章,但没有取得任何进展。 有人可以帮助我吗?

macos terminal
6个回答
14
投票

如果您安装了 Xcode 和开发者工具,您可以随时使用 PlistBuddy...

例如:

/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" /Applications/TextEdit.app/Contents/Info.plist

给我返回 Yosemite 下“

1.10
”的版本号。

任何应用程序的 Info.plist 文件通常在“

CFBundleShortVersionString
”键下都有一个版本。


6
投票

要向列表中添加一个选项,您还可以使用

defaults
工具。

例如:

defaults read /Applications/Firefox.app/Contents/Info.plist CFBundleShortVersionString

将从 Firefox 的 Info.plist 文件中输出

CFBundleShortVersionString
条目的值,例如:
74.0

我更喜欢使用

defaults
命令,因为使用它没有任何前提条件,而且命令非常简单。


4
投票

您也可以使用

tr

FirefoxmdlsVersion= mdls -name kMDItemVersion /Applications/Firefox.app | tr -d ".";

产生

3405
(从 Firefox 34.0.5 开始)


2
投票

请在 MAC 终端中尝试以下命令

system_profiler SPApplicationsDataType |grep "Application Name" -A 8

2
投票

外壳:

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']

1
投票
cat /Applications/Firefox.app/Contents/Info.plist | grep -A1 CFBundleShortVersionString | grep string | sed 's/<[^>]*>//g'

这将进入 Firefox 的

Info.plist
并返回捆绑包的版本号。它所做的最后一件事是从版本周围删除标签以获得干净的输出。

© www.soinside.com 2019 - 2024. All rights reserved.