Une option serait d'utiliser AppleScript:
$ osascript -e 'id of app "Finder"'
com.apple.finder
Vous pouvez aussi faire quelque chose comme ça:
$ bundle=$(mdfind -onlyin / kMDItemKind==Application | grep -i "/Finder.app$" | head -1)
$ defaults read "$bundle/Contents/Info" CFBundleIdentifier
com.apple.finder
Les deux sont assez lents (environ 0,05-0,2s sur mon Air) cependant. Y at-il des options plus rapides ou moins hacky?
defaults read
semble être la bonne façon de le faire (ou interroger LaunchServices via Obj-C) - pourquoi considérez-vous que 0,1s est lent?osascript
solution. Combien de fois par seconde avez-vous besoin de l'exécuter?Réponses:
Pourquoi ne pas lire l'identifiant de paquet à partir du fichier Info.plist de l'application directement à l'aide de PlistBuddy (8):
la source
mdls -name kMDItemCFBundleIdentifier -r SomeApp.app
la source
Utilisation
lsappinfo
Pour obtenir uniquement la valeur de bundleid, ajoutez
| cut -d '"' -f4
à cette commandeVous n'avez pas à gérer votre code avec le chemin de cette application, même si le chemin est modifié.
Tant que l'application est lancée, vous avez une valeur.
Bien que ce ne soit pas aussi rapide que la réponse de @ surry, mais c'est assez rapide.
la source
lsappinfo
lsappinfo
ne fonctionne que sur les applications en cours d'exécution.Les valeurs de
kMDItemKind
dépendent de la localisation actuelle.Que dis-tu de ça?
la source
Si l'affichage de toutes les extensions de nom de fichier est activé, kMDItemDisplayName contient .app pour certaines applications mais pas pour d'autres. Cela échapperait aussi des noms qui contiennent
'
,"
ou\
: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)"
Une autre 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')"
Une seule commande osascript pourrait aussi être plus rapide:
la source