Una opción sería usar AppleScript:
$ osascript -e 'id of app "Finder"'
com.apple.finder
También podrías hacer algo como esto:
$ bundle=$(mdfind -onlyin / kMDItemKind==Application | grep -i "/Finder.app$" | head -1)
$ defaults read "$bundle/Contents/Info" CFBundleIdentifier
com.apple.finder
Sin embargo, ambos son bastante lentos (aproximadamente 0.05-0.2s en mi Air). ¿Hay alguna opción más rápida o menos hacky?

defaults readparece ser la forma correcta de hacerlo (o consultar LaunchServices a través de Obj-C): ¿por qué considera 0.1s lento?osascriptsolucion. Sin embargo, ¿cuántas veces por segundo necesitas ejecutar esto?Respuestas:
¿Qué tal leer el identificador de paquete del archivo Info.plist de la aplicación directamente usando PlistBuddy (8):
fuente
mdls -name kMDItemCFBundleIdentifier -r SomeApp.appfuente
Utilizar
lsappinfoPara obtener solo el valor del paquete, agregue
| cut -d '"' -f4a ese comandoNo tiene que manejar su código con la ruta de esa aplicación, incluso la ruta cambia.
Mientras se inicie la aplicación, obtendrá un valor.
Aunque no es tan rápido como la respuesta de @ surry, es lo suficientemente rápido.
fuente
lsappinfolsappinfosolo funciona en aplicaciones que se ejecutan actualmente.Los valores de
kMDItemKinddependen de la localización actual.¿Qué tal esto?
fuente
Si se muestra mostrar todas las extensiones de nombre de archivo, kMDItemDisplayName contiene .app para algunas aplicaciones pero no para otras. Esto también podría escapar nombres que contienen
',"o\: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)"Otra opción:
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')"Un solo comando osascript también podría ser más rápido:
fuente