Mendapatkan pengidentifikasi bundel aplikasi OS X dalam skrip shell


54

Salah satu opsi adalah menggunakan AppleScript:

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

Anda juga dapat melakukan sesuatu seperti ini:

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

Keduanya cukup lambat (sekitar 0,05-0,2 detik di Udara saya). Apakah ada opsi hacky yang lebih cepat atau kurang?


1
Menggunakan defaults readsepertinya cara yang tepat untuk melakukannya (atau meminta layanan LaunchServices via Obj-C) - mengapa Anda menganggap 0,1s lambat?
Asmus

Saya suka osascriptsolusinya. Berapa kali sedetik Anda perlu menjalankan ini?
arya

Jawaban:


38

Bagaimana dengan membaca pengidentifikasi bundel dari file Info.plist aplikasi secara langsung menggunakan PlistBuddy (8):

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

19

mdls -name kMDItemCFBundleIdentifier -r SomeApp.app


8

Menggunakan lsappinfo

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

Untuk mendapatkan hanya nilai bundleid, tambahkan | cut -d '"' -f4ke perintah itu

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

Anda tidak harus menangani kode Anda dengan jalur aplikasi itu, bahkan jalurnya pun berubah.

Selama aplikasi dimulai, Anda mendapat nilai.

Meskipun tidak secepat jawaban @ surry, tapi itu cukup cepat.


Saya bukan downvoter, tetapi ini tidak bekerja andal bagi saya (sementara metode lain melakukannya). Ini berfungsi dengan beberapa aplikasi tetapi tidak semua.
user137369

@ user137369 Bisakah Anda memberi tahu saya aplikasi apa itu? BTW, aplikasi harus diluncurkan untuk menggunakanlsappinfo
user1641838

4
lsappinfohanya berfungsi pada aplikasi yang sedang berjalan.
mh.

1

Nilai kMDItemKindketergantungan pada lokalisasi saat ini.

Bagaimana dengan ini?

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

0

Jika menunjukkan semua ekstensi nama file diaktifkan, kMDItemDisplayName berisi .app untuk beberapa aplikasi tetapi tidak yang lain. Ini juga akan melarikan diri nama yang mengandung ', "atau \:

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

Pilihan lain:

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

Satu perintah osascript mungkin juga lebih cepat:

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'
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.