Obtendo o identificador de pacote de um aplicativo OS X em um shell script

41

Uma opção seria usar o AppleScript:

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

Você também pode fazer algo assim:

$ bundle=$(mdfind -onlyin / kMDItemKind==Application | grep -i "/Finder.app$" | head -1)
$ defaults read "$bundle/Contents/Info" CFBundleIdentifier
com.apple.finder

Ambos são razoavelmente lentos (aproximadamente 0.05-0.2s no meu ar). Existe alguma opção mais rápida ou menos hacky?

    
por user495470 14.10.2011 / 03:10

5 respostas

0

Se a exibição de todas as extensões de nome de arquivo estiver ativada, kMDItemDisplayName contém .app para alguns aplicativos, mas não para outros. Isso também escaparia de nomes que contenham ' , " 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)"

Outra opção:

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')"

Um único comando osascript também pode ser mais rápido:

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'
    
por 20.07.2012 / 18:01
31

Que tal ler o identificador do pacote do arquivo Info.plist do aplicativo diretamente usando o PlistBuddy (8):

/usr/libexec/PlistBuddy -c 'Print CFBundleIdentifier' /Applications/Safari.app/Contents/Info.plist
    
por 31.05.2013 / 00:25
16

mdls -name kMDItemCFBundleIdentifier -r SomeApp.app

    
por 19.11.2014 / 11:30
4

Use lsappinfo

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

Para obter apenas o valor do pacote, adicione | cut -d '"' -f4 ao comando

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

Eu não sei porque esta anwser tem um voto negativo.

Esse sulco é simples.

Você não precisa manipular seu código com o caminho desse Aplicativo, até mesmo o caminho muda.

Desde que o aplicativo seja iniciado, você tem um valor.

Embora não seja tão rápido quanto a resposta de @ surry, mas é rápido o suficiente.

    
por 24.11.2015 / 08:22
1

Os valores de kMDItemKind dependem da localização atual.

Que tal isso?

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

Tags