Script per verificare la versione del software

2

Ciao sto cercando di scrivere uno script per verificare la versione del software. Voglio passare le mie variabili, che sono il nome dell'applicazione e della versione.

Ecco una copia. Al momento non funziona per me ... sono un noob e sono abbastanza sicuro che abbia a che fare con la sintassi.

Qualsiasi input è apprezzato.

Grazie, Paul

#/bin/sh

#Enter the Name of the Application here
ApplicationName=/Applications/FakeApp.app
ApplicationVersionNumber=1.0
echo $ApplicationName

#Check if Directory Exist
if [ ! -d $ApplicationName ]; then
            echo $ApplicationName "is not installed"
            exit 123456
fi
echo $ApplicationName " is installed"

# Check Version
VersionCheck='cat $ApplicationName/version.plist | grep $ApplicationVersionNumber'
echo $VersionCheck
if [ ${#VersionCheck} != 0 ]; then
echo $VersionCheck
echo $ApplicationName $ApplicationVersion Number "is Installed"
exit 0
fi
echo $ApplicationName $ApplicationVersion Number "is NOT Installed"

exit 1
    
posta Paul Mung 14.04.2014 - 21:17
fonte

2 risposte

6

C'è davvero solo un errore di sintassi che hai fatto. Metti uno spazio prima di Numero in $ApplicationVersionNumber . La maggior parte delle app non ha un file version.plist, ma hanno sempre la versione nel proprio Info.plist.

Ecco una versione fissa dello script con alcuni miglioramenti:

#!/bin/sh

ApplicationName=/Applications/FakeApp.app
ApplicationVersionNumber=1.0
echo $ApplicationName

#Check if Directory Exist
if [ ! -d $ApplicationName ]; then
    echo "$ApplicationName is not installed"
    exit 123456
fi
echo "$ApplicationName is installed"

# Check Version
VersionCheck='plutil -p "${ApplicationName}/Contents/Info.plist" | grep "CFBundleShortVersionString.*$ApplicationVersionNumber"'
echo $VersionCheck
if [ ${#VersionCheck} != 0 ]; then
    echo "$ApplicationName $ApplicationVersionNumber is Installed"
    exit 0
fi
echo "$ApplicationName $ApplicationVersionNumber is NOT Installed"
exit 1
  • Utilizza plutil -p anziché cat , poiché plutil può stampare una versione piacevole e leggibile del plist anche se non è in formato XML.
  • È greps per la chiave (CFBundleShortVersionString), .* e quindi il valore. Questo è meglio perché non vuoi che si attivi su cose come LSMinimumSystemVersion .
  • Ho anche aggiunto più citazioni perché mi piacciono le virgolette e le cose sono (di solito) meno propensi a rompere in questo modo.

L'avrei scritto in questo modo:

#!/bin/bash
app_path="$1"
desired_version="$2"

#Get the line, regardless of whether it is correct
version_line=$(plutil -p "${app_path}/Contents/Info.plist" | grep "CFBundleShortVersionString")
if [[ $? -ne 0 ]]; then
    version_line=$(plutil -p "${app_path}/Contents/Info.plist" | grep "CFBundleVersion")
    if [[ $? -ne 0 ]]; then #if it failed again, the app is not installed at that path
        echo "$app_path not installed at all"
        exit 123456
    fi
fi
#Some text editing to get the real version number
real_version=$(echo $version_line | grep -o '"[[:digit:].]*"' | sed 's/"//g')
if [ "$real_version" = "$desired_version" ]; then
    echo "$app_path $desired_version is installed"
    exit 0
fi
echo "${app_path}'s version is $real_version, not $desired_version"
exit 1

Il vantaggio di questo è che controlla la stringa della versione effettiva, quindi se inserisci 1.3 ed è 1.3.1, segnala che si tratta di una versione diversa. $1 e $2 sono gli argomenti della riga di comando che vengono passati come ./script.sh '/Applications/FakeApp.app' '1.3'

Inoltre, l'altro conterà come corretto su 1.1 per 121 perché grep conteggia il . come carattere jolly.

    
risposta data 14.04.2014 - 21:54
fonte
1

Puoi anche utilizzare AppleScript o defaults :

$ osascript -e 'version of app "TextEdit"'
1.9
$ defaults read /Applications/TextEdit.app/Contents/Info.plist CFBundleShortVersionString
1.9

Puoi utilizzare AppleScript o mdfind per trovare il percorso di un'applicazione:

$ osascript -e 'posix path of (path to app "textedit")'
/Applications/TextEdit.app/
$ mdfind 'kMDItemContentType=com.apple.application-bundle&&kMDItemFSName=TextEdit.app'
/Applications/TextEdit.app
    
risposta data 19.09.2014 - 10:45
fonte

Leggi altre domande sui tag