쉘 스크립트에서 OS X 애플리케이션의 번들 ID 가져 오기


54

한 가지 옵션은 AppleScript를 사용하는 것입니다.

$ 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-C를 통해 LaunchServices를 쿼리하는 경우). 왜 0.1s를 느리게 생각합니까?
Asmus

나는 osascript해결책을 좋아한다 . 이것을 몇 초에 몇 번 실행해야합니까?
arya

답변:


38

PlistBuddy (8)를 사용하여 응용 프로그램의 Info.plist 파일에서 번들 식별자를 직접 읽는 방법은 다음과 같습니다.

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

19

mdls -name kMDItemCFBundleIdentifier -r SomeApp.app


8

사용하다 lsappinfo

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

bundleid 값만 가져 오려면 | cut -d '"' -f4해당 명령에 추가하십시오.

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

해당 응용 프로그램의 경로를 사용하여 코드를 처리 할 필요는 없으며 경로도 변경됩니다.

응용 프로그램이 시작되는 한 가치가 있습니다.

@surry의 답변만큼 빠르지는 않지만 충분히 빠릅니다.


나는 downvoter가 아니지만 이것은 나에게 안정적으로 작동하지 않습니다 (다른 방법은 그렇지 않습니다). 일부 앱에서는 작동하지만 전부는 아닙니다.
user137369

@ user137369 그 앱이 무엇인지 말씀해 주시겠습니까? BTW, 앱을 사용하기 위해 시작해야 함lsappinfo
user1641838

4
lsappinfo현재 실행중인 앱에서만 작동합니다.
mh.

1

값은 kMDItemKind현재 현지화 에 따라 다릅니다.

이것은 어떤가요?

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

0

모든 파일 이름 확장자를 표시하면 kMDItemDisplayName에 일부 응용 프로그램의 경우 .app가 포함되지만 다른 응용 프로그램에는 포함되지 않습니다. 이것은 또한 포함하는 이름 피할 것 ', "또는를 \:

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 명령이 더 빠를 수도 있습니다.

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.