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?
defaults read
sepertinya cara yang tepat untuk melakukannya (atau meminta layanan LaunchServices via Obj-C) - mengapa Anda menganggap 0,1s lambat?osascript
solusinya. Berapa kali sedetik Anda perlu menjalankan ini?Jawaban:
Bagaimana dengan membaca pengidentifikasi bundel dari file Info.plist aplikasi secara langsung menggunakan PlistBuddy (8):
sumber
mdls -name kMDItemCFBundleIdentifier -r SomeApp.app
sumber
Menggunakan
lsappinfo
Untuk mendapatkan hanya nilai bundleid, tambahkan
| cut -d '"' -f4
ke perintah ituAnda 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.
sumber
lsappinfo
lsappinfo
hanya berfungsi pada aplikasi yang sedang berjalan.Nilai
kMDItemKind
ketergantungan pada lokalisasi saat ini.Bagaimana dengan ini?
sumber
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:
sumber