শেল স্ক্রিপ্টে কোনও OS X অ্যাপ্লিকেশনটির বান্ডিল শনাক্তকারী


53

একটি বিকল্প অ্যাপল স্ক্রিপ্ট ব্যবহার করা হবে:

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

আপনি এটির মতোও কিছু করতে পারেন:

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

যদিও এই উভয়ই বেশ ধীরে ধীরে (আমার এয়ারে প্রায় 0.05-0.2 সেকেন্ড)। কোন দ্রুত বা কম হ্যাকী বিকল্প আছে?


1
ব্যবহার defaults read(OBJ-সি মাধ্যমে অথবা অন্য অনুসন্ধান LaunchServices) এটা করতে সঠিক ভাবে মত মনে হয় - কেন তুমি 0.1s ধীর বিবেচনা করবেন?
Asmus

আমি osascriptসমাধানটি পছন্দ করি । যদিও এটি চালানোর জন্য আপনাকে দ্বিতীয়বার কতবার দরকার?
আর্য

উত্তর:


38

সরাসরি প্লিস্টবুডি (8) ব্যবহার করে অ্যাপ্লিকেশনটির তথ্য.পল্লিস্ট ফাইল থেকে বান্ডেল সনাক্তকারী পড়ার বিষয়ে কীভাবে:

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


7

ব্যবহার lsappinfo

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

কেবল বান্ডলিড মান পেতে, | cut -d '"' -f4এই কমান্ডটি যুক্ত করুন

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

আপনাকে সেই অ্যাপ্লিকেশনটির পথ দিয়ে এমনকি আপনার কোডটি হ্যান্ডেল করতে হবে না even

যতক্ষণ অ্যাপ্লিকেশন শুরু হবে ততক্ষণ আপনি একটি মান পেয়েছেন।

যদিও এটি @ সুরির উত্তরের মতো দ্রুত নয়, তবে এটি যথেষ্ট দ্রুত fast


আমি ডাউনভোটার নই, তবে এটি আমার পক্ষে নির্ভরযোগ্যভাবে কাজ করে না (অন্য পদ্ধতিগুলি করলেও)। এটি কিছু অ্যাপ্লিকেশন নিয়ে কাজ করছে তবে সবকটি নয়।
ব্যবহারকারী 137369

@ user137369 আপনি কি দয়া করে আমাকে বলতে পারবেন যে অ্যাপটি কী? বিটিডাব্লু, অ্যাপটি ব্যবহার করতে চালু করতে হবেlsappinfo
user1641838

3
lsappinfoশুধুমাত্র বর্তমানে চলমান অ্যাপগুলিতে কাজ করে।
এমএইচ।

1

kMDItemKindবর্তমান স্থানীয়করণের উপর নির্ভর করে এর মান ।

এ কেমন?

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

0

যদি সমস্ত ফাইলের নাম এক্সটেনশনগুলি সক্ষম করে তা সক্ষম করা হয়, কেএমডিআইটিএমডিপ্লাইনেমে কিছু অ্যাপ্লিকেশনের জন্য। অ্যাপ থাকে তবে অন্যদের নয়। এই নাম যেগুলিতে অব্যাহতি হবে ', "অথবা \:

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

অন্য বিকল্প:

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

একটি একক ওসাস্ক্রিপ্ট কমান্ডও দ্রুত হতে পারে:

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'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.