2014-12-22 5 views
2

Мне нужно использовать версию приложения в сценарии .sh на Mac osX 10.10, чтобы я мог сравнить с другим номером, чтобы я мог заставить обновление или нет.Как вернуть версию приложения в терминале osx

До сих пор я это (я использую Firefox.app в качестве примера)

FirefoxmdlsVersion= mdls -name kMDItemVersion /Applications/Firefox.app; 
echo $FirefoxmdlsVersion 

Это возвращает kMDItemVersion = "34.0", который является шагом в правильном направлении, но мне нужно только номер, так что я могу сделать мой сравнить пример 340

Вот что я пытался сделать с новой переменной, но я не получаю сообщение об ошибке или вывода на всех

FFV2=${FirefoxmdlsVersion//'kMDItemVersion ='} 
FFV3=${FirefoxmdlsVersion:18:4} 

I возможно, здесь, в неправильном направлении, но я смотрел сообщение, и хавент сделал какой-то прогресс. Может кто-нибудь мне помочь?

ответ

1

Вы можете использовать tr, а также:

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

Который производит 3405 (от Firefox 34.0.5)

+1

Вместо использования 'tr' вы можете использовать флаг' -raw': 'FirefoxmdlsVersion = mdls -raw -name kMDItemVersion/Applications/Firefox.app'. – icecream

+0

@icecream - OP хотел удалить '.' И '-raw', не делает этого. Однако '-raw' удаляет все остальное, кроме числа с точками (даже в новой строке), поэтому как' -raw', так и 'tr' производят только цифры, если это то, что требуется. – CRD

+0

Это решение требует, чтобы приложение было проиндексировано прожектором MacOSX. –

3

Если у вас есть Xcode и инструменты для разработчиков установки, вы всегда можете использовать PlistBuddy ...

Например:

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

возвращает мне номер версии «1.10» под Йосемити.

Файл Info.plist любого приложения обычно имеет версию под ключом «CFBundleShortVersionString».

+0

Будет ли это работать внутри loginhook сценария? Я надеялся, что мне не нужно будет устанавливать что-либо на клиентских станциях, на которых запущен скрипт. – ShawnIT

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

Это будет идти в Info.plist для Firefox и вернуть номер версии для расслоение. Последнее, что он делает, это удалить теги из версии для чистого вывода.

2

Shell:

plutil -p /Applications/Firefox.app/Contents/Info.plist | awk '/CFBundleShortVersionString/ {print substr($3, 2, length($3)-2)}' 

Или Python:

import plistlib 
plistlib.readPlist('/Applications/Firefox.app/Contents/Info.plist')['CFBundleShortVersionString'] 
0

Пожалуйста, попробуйте следующую команду в Терминале MAC

system_profiler SPApplicationsDataType |grep "Application Name" -A 8 
Смежные вопросы