Eine Möglichkeit wäre die Verwendung von AppleScript:
$ osascript -e 'id of app "Finder"'
com.apple.finder
Sie könnten auch so etwas tun:
$ bundle=$(mdfind -onlyin / kMDItemKind==Application | grep -i "/Finder.app$" | head -1)
$ defaults read "$bundle/Contents/Info" CFBundleIdentifier
com.apple.finder
Beide sind jedoch ziemlich langsam (ungefähr 0,05 bis 0,2 Sekunden in meiner Luft). Gibt es schnellere oder weniger hackige Optionen?
defaults read
scheint der richtige Weg zu sein (oder LaunchServices über Obj-C abzufragen) - warum halten Sie 0.1s für langsam?osascript
Lösung. Wie oft pro Sekunde müssen Sie dies jedoch ausführen?Antworten:
Wie wäre es, wenn Sie die Paket-ID direkt mit PlistBuddy (8) aus der Info.plist-Datei der Anwendung lesen würden:
quelle
mdls -name kMDItemCFBundleIdentifier -r SomeApp.app
quelle
Verwenden
lsappinfo
Um nur den Wert bundleid zu erhalten, fügen Sie
| cut -d '"' -f4
diesen Befehl hinzuSie müssen Ihren Code nicht mit dem Pfad dieser Anwendung behandeln, auch wenn sich der Pfad ändert.
Solange die Anwendung gestartet ist, haben Sie einen Wert.
Es ist zwar nicht so schnell wie @surrys Antwort, aber es ist schnell genug.
quelle
lsappinfo
lsappinfo
Funktioniert nur mit derzeit ausgeführten Apps.Werte von
kMDItemKind
hängen von der aktuellen Lokalisierung ab.Wie wäre es damit?
quelle
Wenn die Anzeige aller Dateinamenerweiterungen aktiviert ist, enthält kMDItemDisplayName für einige Anwendungen .app, für andere nicht. Dies würde auch die Namen entkommen , die enthalten
'
,"
oder\
:a="Consultant's Canary"; a="${a//\'/\'}.app"; a=${a//"/\\"}; a=${a//\\/\\\\}; mdls -name kMDItemCFBundleIdentifier -raw "$(mdfind 'kMDItemContentType==com.apple.application-bundle&&kMDItemFSName=="'"$a"'"' | head -n1)"
Andere Option:
a=Finder; mdls -name kMDItemCFBundleIdentifier -raw "$(mdfind kMDItemContentType==com.apple.application-bundle | sed -E $'s|(.*/)(.*)|\\1\t\\2|' | grep -F $'\t'"$a".app -m1 | tr -d '\t')"
Ein einzelner osascript-Befehl kann auch schneller sein:
quelle