Hallo, ich versuche, ein Skript zu schreiben, um die Softwareversion zu überprüfen. Ich möchte meine eigenen Variablen übergeben, die Name der Anwendung und Version sind.
Hier ist eine Kopie. Es funktioniert derzeit nicht für mich ... ich bin ein Noob und ich bin mir ziemlich sicher, dass es mit der Syntax zu tun hat.
Jede Eingabe wird geschätzt.
Danke, 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
Es gibt wirklich nur einen Syntaxfehler, den Sie gemacht haben. Sie setzen ein Leerzeichen vor Zahl in $ApplicationVersionNumber
. Die meisten Apps haben keine version.plist-Datei, aber sie haben immer die Version in ihrer Info.plist.
Hier ist eine korrigierte Version des Skripts mit einigen Verbesserungen:
#!/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
plutil -p
anstelle von cat
, da plutil eine schöne, lesbare Version der plist ausdrucken kann, auch wenn sie nicht im XML-Format vorliegt..*
und dann nach dem Wert. Dies ist besser, weil Sie nicht möchten, dass es bei Dingen wie ausgelöst wird LSMinimumSystemVersion
.Ich hätte es so geschrieben:
#!/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
Der Vorteil davon ist, dass die tatsächliche Versionszeichenfolge überprüft wird. Wenn Sie also 1.3 eingeben und es 1.3.1 ist, wird gemeldet, dass es sich um eine andere Version handelt. $1
und $2
sind die Kommandozeilenargumente, die wie übergeben werden./script.sh '/Applications/FakeApp.app' '1.3'
.
Außerdem würde der andere auf 1.1 für 121 als korrekt gelten, da grep den als Platzhalter zählt .
Sie können auch AppleScript oder verwenden defaults
:
$ osascript -e 'version of app "TextEdit"'
1.9
$ defaults read /Applications/TextEdit.app/Contents/Info.plist CFBundleShortVersionString
1.9
Sie können AppleScript oder verwenden, mdfind
um den Pfad einer Anwendung zu finden:
$ osascript -e 'posix path of (path to app "textedit")'
/Applications/TextEdit.app/
$ mdfind 'kMDItemContentType=com.apple.application-bundle&&kMDItemFSName=TextEdit.app'
/Applications/TextEdit.app
Paul Mun
TJ Luoma
0942v8653
TJ Luoma
0942v8653