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 read
parece ser la forma correcta de hacerlo (o consultar LaunchServices a través de Obj-C): ¿por qué considera 0.1s lento?osascript
solucion. 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.app
fuente
Utilizar
lsappinfo
Para obtener solo el valor del paquete, agregue
| cut -d '"' -f4
a 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
lsappinfo
lsappinfo
solo funciona en aplicaciones que se ejecutan actualmente.Los valores de
kMDItemKind
dependen 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