Wie kann man prüfen, ob bestimmte Anwendung/software ist installiert, die in Mac OS
Ich möchte prüfen, ob bestimmte Anwendung installiert ist Mac OS mit Perl - /Shell-Skripten.
Ich Schreibe-Paket mit PackageMaker in die ich brauche, um zu überprüfen, Benutzer-Maschine für wenige Anwendungen, bevor Sie die Anwendung installieren.
Also ich bin Planung, um ein Skript schreiben, dass dies für mich überprüfen.
Bitte um Rat wenn ich kann, führen diese in besser Weise.
- Vielleicht suchen Sie für die Anwendung .app Datei in den /Applications?
- Applescript ist möglicherweise eine option zum testen, ob es könnte die app starten. Nicht wissen, ist, dass gegen Sie perl/shell obwohl.
- JoePasq , können Benutzer installieren die Anwendung in einem anderen Ort als gut
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ergänzen @Bavarious' hilfreiche Antwort:
Hier sind generic
bash
Funktionen das erweitern testen, ob eine Anwendung installiert ist durch Rücksendung entweder eine Anwendung Pfad oder den bundle-ID, wenn Sie installiert werden. Wenn Sie Sie in Ihre bash Profil, Sie können kommen in praktisch für den interaktiven Gebrauch zu.Entweder-Funktion kann auch verwendet werden, als ein test, ob eine Anwendung installiert ist, z.B.:
if ! whichapp 'someApp' &>/dev/null; then ... # not installed
Weder in Funktion ist case-sensitive, und, wenn Sie ein Namen, die
.app
suffix ist optional.Beachten Sie jedoch, dass lokalisierte Namen sind nicht erkannt.
whichapp
Einer Funktion zum Auffinden von Anwendungen, die von entweder bundle-ID oder Namen.
Gibt Pfad der Anwendung, wenn gefunden wird; andernfalls wird ein Fehler gemeldet.
Beispiele:
whichapp finder # -> '/System/Library/CoreServices/Finder.app/'
whichapp com.apple.finder # -> '/System/Library/CoreServices/Finder.app/'
bundleid
Gegeben, einer Anwendung, die mit Namen, gibt die bundle-ID.
Beispiel:
bundleid finder # -> 'com.apple.finder'
Umsetzung Hinweis: In den AppleScript-code, es ist verlockend, zu umgehen, der Finder-Kontextmenü und verwenden Sie einfach z.B.
application [id] <appNameOrBundleId>
undpath to application [id] <appNameOrBundleId>
im globalen Kontext, aber das problem ist, dass immer startet die gezielte Anwendung, die ist, unerwünscht.Quelle: whichapp
Hinweis: Die Funktion findet auch Anwendungen ins Leben gerufen von einer montiert Volumen in einer bestimmten Sitzungvielen Dank, Wunder-Hund., aber da solche Anwendungen nicht persistent installiert (nicht dauerhaft registriert mit der macOS-Launch Services), eine Warnung ausgestellt wird, in diesem Fall.
Wenn gewünscht, können Sie leicht ändern Sie die Funktion zum melden eines Fehlers statt.
Quelle: bundleid
/Volumes/...
entspricht nach der Tat). Auf macOS 10.13.6 ich sehe nicht das symptom mit Bezug auf eine gelöschte Anwendung - welche version Sie auf?Folgende bash-Skript verwendet AppleScript, um zu überprüfen, ob eine Anwendung installiert ist, basierend auf eine Lösung von Michael Pilat:
Das Skript erwartet eine Anwendungs-id (z.B. com.apple.Album Vorhören). Nach der Ausführung des Skripts
retcode
enthält 1, wenn die Anwendung installiert ist und 0, wenn die Anwendung nicht installiert ist. Das Skript gibt auchretcode
.Beispiel:
oder
getAppPathByBundleId() { osascript -e 'try' -e 'tell application "Finder" to return POSIX path of (path to application file id "'"$1"'") as text' -e 'end try'; }
. Siehe auch meine Antwort für die Prüfung von app-Namen und der Suche nach einem app-bundle-ID. (Beachten Sie, dass es ist verlockend, ich habe nur gelernt die harte Weise, die bypass-Finder-Kontextmenü und verwenden Sie einfach z.B.application id "com.apple.reminders"
, die arbeiten, aber implizit startet die angegebene app.)Können Sie die
system_profiler
Befehl für diesen. Probieren Sie etwas wie dieses:Zum größten Teil, alle Drittanbieter-apps sind installiert in den Ordner "Anwendungen". Der einfachste Weg wäre einfach zu grep durch, die.
Ersetzen Sie einfach APP_NAME mit dem, was du bist suchen für. Die "-i" macht den grep groß-und Kleinschreibung, so dass abgesehen von einigen größeren Rechtschreibfehler wenn es installiert ist, es werde eine Liste aus der Datei. Sonst wird das hier nichts zurück.
~/Applications
, aber auch in anderen, nicht-standard-Standorten. Daher, @Bavarious' Lösung vorzuziehen ist.