이것은 가능하지만 생각만큼 간단하지는 않습니다. Uniform Type Identifiers에 익숙해 져야합니다. Wikipedia의 Uniform Type Identifier 페이지를보십시오.
OS X은 기본 설정 파일에 대한 정보를 이름이있는 기본 설정 파일에 저장합니다 com.apple.LaunchServices.plist
. 해당 파일을 찾아 수정하기 전에 기본값 ( "설정")에 대한 OS X의 도메인 계층 구조에 익숙해지는 것이 좋습니다. 이것에 대한 적절한 기사는 여기 에서 찾을 수 있습니다 . (면책 조항 : 그들은 그 사이트에서 무언가를 팔고있는 것 같습니다. 나는 그것이 무엇인지 알지 못하고 그들과 관련이 없습니다. 설명은 단지 좋은 것입니다.)
이제 기본 및 UTI (의료 종류가 아닌)에 대한 모든 정보를 알았으므로 이제 스크립트 / 명령 줄에서 파일 연결 설정에 대해 이야기 할 수 있습니다.
먼저, 연결하려는 파일을 식별하는 올바른 방법을 알아야합니다.
UTI가 중요하다고 어떻게 말했는지 기억하십니까? 파일을 식별하는 방법에는 여러 가지가 있습니다. 형식이 시스템에서 공식적으로 선언되었는지 여부에 따라 다릅니다. 예를 들어 TextMate 또는 TextWrangler와 같은 괜찮은 텍스트 편집기는 시스템에서 사용할 때 유형 계층 구조에 유형 선언을 상당히 추가합니다. 그러나 해당 응용 프로그램이없는 경우 해당 유형을 선언하지 않았을 수 있습니다.
알겠습니다 예 :
파일의 UTI를 가져옵니다.
$ mdls myFile.xml
...
kMDItemContentType = "public.xml"
kMDItemContentTypeTree = (
"public.xml",
"public.text",
"public.data",
"public.item",
"public.content"
)
...
그래요 좋아요. 사용할 수있는 명시적인 컨텐츠 유형입니다. 어딘가에 적어 둡니다.
$ mdls myFile.myExtn
...
kMDItemContentType = "dyn.ah62d4rv4ge8048pftb4g6"
kMDItemContentTypeTree = (
"public.data",
"public.item"
)
...
죄송합니다. OS X은 ".myExtn"파일에 대해 모른다. 그래서 우리는 아무것도 사용할 수없는 역동적 인 UTI를 만들었습니다. 그리고 부모 유형은 너무 일반적이기 때문에 유용하지 않습니다.
파일이 무엇인지 알았으므로 LaunchServices.plist 파일을보고 수행 할 수있는 작업을 살펴 보겠습니다.
$defaults read com.apple.LaunchServices
{
...
LSHandlers = (
{
LSHandlerContentType = "public.html";
LSHandlerRoleAll = "com.apple.safari";
LSHandlerRoleViewer = "com.google.chrome";
},
...
{
LSHandlerContentTag = myExtn;
LSHandlerContentTagClass = "public.filename-extension";
LSHandlerRoleAll = "com.macromates.textmate";
},
...
);
...
}
따라서 사용할 "좋은"컨텐츠 유형이 있으면 첫 번째 구성이 더 좋습니다. 그렇지 않으면 다른 구조. 해당 파일에는 다른 구성이 있지만 요청한 내용과 관련이 없습니다. 출력을 볼 때 그것들이 있다는 것을 알면됩니다.
보시다시피 사용하려는 응용 프로그램의 UTI를 찾아야합니다. Safar 및 TextMate의 UTI는 위의 예에 있지만 일반적으로 응용 프로그램의 UTI를 찾으려면 다음과 같습니다.
$ cd /Applications/MyApp.app/Contents
$ less Info.plist
...
<key>CFBundleIdentifier</key>
<string>com.apple.Safari</string>
...
참고 : 나는이 없다 더 LSHandlerRoleAll와 LSHandlerRoleViewer의 차이를 구성하는 것에 아이디어를. 어디에서나 문서를 찾을 수 없습니다. 내가 할 참조입니다 LSHandlerRoleAll는 시간의 99 % 만 한 세트 (즉,이 더 LSHandlerRoleViewer이 전혀 없음) 그리고 그것은 당신이 가진 유형을 연결하고자하는 응용 프로그램에 대한 UTI로 설정되어 있는지.
지금까지 당신을 데려왔으므로 독자에게 연습으로 원하는 값을 설정하는 방법을 남겨 두겠습니다. 이러한 것들에 대한 혼란은 다소 위험 할 수 있습니다. 파일을 망쳐 놓고 파일 연결이 작동하지 않는 것은 전적으로 가능합니다. 그런 다음 파일을 버리고 다시 시작해야합니다.
몇 가지 힌트 :
- 읽기
defaults write
및 구문
- 살펴보십시오
PlistBuddy
. man PlistBuddy
과/usr/libexec/PlistBuddy -h
- 이 넌센스를 모두 건너 뛰고 RCDefaultApp을 사용 하십시오.