76 votes

Obtenir l'identifiant de bundle d'une application OS X dans un script shell

Une option serait d'utiliser AppleScript :

$ osascript -e 'id of app "Finder"'
com.apple.finder

Vous pouvez également faire quelque chose comme ceci :

$ 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 a-t-il des options plus rapides ou moins bricolées ?

49voto

user228005 Points 11

Que diriez-vous de lire l'identifiant du bundle directement à partir du fichier Info.plist de l'application en utilisant PlistBuddy (8) :

/usr/libexec/PlistBuddy -c 'Print CFBundleIdentifier' /Applications/Safari.app/Contents/Info.plist

36voto

Sanjay Joshi Points 111

mdls -name kMDItemCFBundleIdentifier -r SomeApp.app

15voto

C.W. Points 298

Utilisez lsappinfo

CC@~ $ lsappinfo info -only bundleid Finder
"CFBundleIdentifier"="com.apple.finder"

Pour obtenir uniquement la valeur du bundleid, ajoutez | cut -d '"' -f4 à cette commande

CC@~ $ lsappinfo info -only bundleid Finder | cut -d '"' -f4
com.apple.finder

Vous n'avez pas à gérer votre code avec le chemin de cette application, même si le chemin change.

Tant que l'application est démarrée, vous avez une valeur.

Bien que ce ne soit pas aussi rapide que la réponse de @surry, mais c'est assez rapide.

1voto

Bayden Tagget Points 11

Les valeurs de kMDItemKind dépendent de la localisation actuelle.

Qu'en est-il de ceci?

mdls -name kMDItemCFBundleIdentifier \
     -raw "$(mdfind "(kMDItemContentTypeTree=com.apple.application) && (kMDItemDisplayName == 'photoshop*'cdw)" | head -1)"

0voto

Dave Points 986

Si l'affichage de toutes les extensions de fichier est activé, kMDItemDisplayName contient .app pour certaines applications mais pas pour d'autres. Cela échapperait également aux noms contenant ', ", 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 également être plus rapide:

osascript -e 'on run args
set output to {}
repeat with a in args
set end of output to id of app a
end
set text item delimiters to linefeed
output as text
end' Finder 'AppleScript Editor'

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X