it-swarm-korea.com

Mac OS에서 명령 줄 인수로 응용 프로그램을 실행하려면 어떻게해야합니까?

Mac에서 응용 프로그램에 명령 줄 인수를 추가하는 쉬운 방법이 있습니까? 예를 들어 Opera를 키오스크 모드로 실행하거나 Firefox에서 다른 프로필을 사용하려면 다음을 입력 할 수 있습니다.

$ /Applications/Opera.app/Contents/MacOS/Opera -kioskmode
$ /Applications/Firefox.app/Contents/MacOS/firefox -P profilename -no-remote

Windows에서는 단축키 속성에 인수를 추가 할 수 있지만 Mac에서는 단축키 자체를 사용하지 않고 응용 프로그램을 직접 실행하지 않기 때문에 불가능합니다.

나는 bash 또는 Applescript를 통해 응용 프로그램을 실행하는 것이 부분적으로 작동 함을 발견했습니다.

# Bash
#!/bin/sh
/Applications/Firefox.app/Contents/MacOS/firefox -P default -no-remote

# Applescript    
do Shell script "exec /Applications/Opera.app/Contents/MacOS/Opera -kioskmode"

이 실행 파일을 만들 수 있고 아이콘을 할당 할 수 있습니다. 위의 두 가지 의사 프로그램 중 하나를 실행할 때 응용 프로그램이 열려있는 동안 터미널 창이나 AppleScript 아이콘이 열려있는 경우를 제외하고는 모두 잘 작동합니다. 아마도 Applescript 명령 open을 사용하면이 문제를 피할 수 있지만 응용 프로그램이 패키지화되어 있으므로 (/Applications/Firefox 만) 응용 프로그램이 실행되고 있지 않으므로 작동하지 않습니다.

따라서 명령 줄 인수로 응용 프로그램을 실행하는 더 좋은 방법이 있습니까? 그렇지 않다면 응용 프로그램이 열려있는 동안 영구적 인 터미널 세션이나 AppleScript 아이콘이 열려 있지 못하도록하는 방법이 있습니까?

편집

Mozilla Wiki 페이지 에 따르면 스크립트를 사용하여 인수를 사용하여 응용 프로그램을 실행하는 것이 가장 좋습니다. 스크립트 끝에 &를 추가하면 영구 터미널 창이 제거됩니다. 유일한 귀찮은 점은 죽은 로그 아웃 터미널 창을 여는 것입니다 (영구적 인 것보다 낫지 만 여전히 ...)

#!/bin/sh
/Applications/Firefox.app/Contents/MacOS/firefox -P default -no-remote &
59
Andrew

내 최고의 솔루션은 다음과 같습니다 : AppleScript로 작성 :

do Shell script "/Applications/Firefox.app/Contents/MacOS/firefox -P default -no-remote & killall Firefox.app"

그리고 응용 프로그램으로 저장하십시오 .

첫 번째 부분에있는 모든 arg와 함께 응용 프로그램을 넣을 수 있습니다. & 다음의 부분은 스크립트 + .app의 이름을 지우는 것이 필요합니다. 도크에서 스크립트 앱이 깜박 거릴 것이지만 사라질 것입니다.

참고 : 작성한 스크립트 응용 프로그램에서 실행하는 경우에만 스크립트 편집기에서 실행할 때 스크립트가 제대로 작동하지 않습니다.

16
MJeffryes

OS X 10.6.2부터 open 명령은 -args 플래그를 사용하여 여는 응용 프로그램에 인수를 전달할 수 있습니다. 그것을 사용하는 AppleScript는 다음과 같습니다 :

do Shell script "open -a /Applications/Firefox.app --args -P default -no-remote"

그것은 당신에게 당신이 원하는 모든 행동을 제공해야합니다.

25
Bob

열기 Automator / 단일실행 셸 스크립트작업으로Application

 /Applications/Firefox.app/Contents/MacOS/firefox-bin -here-some-args &

이 응용 프로그램은 Firefox를 시작하고 즉시 종료하며 Firefox 만 실행합니다.


또는 다음 AppleScript 코드와 함께 AppleScript 편집기 를 사용하여 응용 프로그램을 만듭니다.

do Shell script "open -a '/Users/danielbeck/Applications/Firefox.app' --args -ProfileManager"

둘 다 잘 작동하고 터미널이나 스크립트 응용 프로그램을 1 초 이상 실행하지 마십시오. Automator를 사용하면Service를 만들 수도 있습니다.

11
Daniel Beck

이것은 오래된 토론이지만 Google 검색에서 계속 나오므로 몇 가지를 추가 할 것입니다.

실행 파일의 절대 경로가 아닌 "번들 식별자"를 사용하는 것이 좋습니다.

open -b com.google.Chrome --args --profile-directory="Profile 1"

또는 Apple Script에서

do Shell script "open -b com.google.Chrome --args --profile-directory='Profile 1'"

내가 아직 알아 내지 못한 것은 처음 인스턴스가 이미 열려 있으면 다른 프로파일로 새 인스턴스/창을 여는 방법입니다. (위의 AppleScript를 실행 한 다음 다른 프로필을 "프로필 2"로 설정하면 Chrome은 여전히 ​​다른 프로필을 "프로필 1"로 엽니 다.) :(

8
user1722483

이 시나리오에서 killall (또는 이와 유사한)를 사용하여 부모 AppleScript 응용 프로그램 프로세스 ( "애플릿")를 종료 할 필요는 없습니다. killall에 지정된 이름/패턴이 부모 애플릿 프로세스 (예 : "applet"를 패턴으로 사용하는 경우)와 동시에 부모 애플릿 프로세스보다 더 일치하는 경우 부작용이있을 수 있습니다.

kill $PPID와 같은 것이 더 합리적 일 수 있지만 AppleScript 응용 프로그램의 애플릿이 항상 do Shell script에 의해 시작된 Shell의 직계 부모라고 가정하지 않을 수 있습니다. 운 좋게도 필요한 작업을 수행하는 데 가장 합리적인 방법이 있습니다.

TN2065 (“백그라운드 서버 프로세스를 시작하고 싶습니다. 명령이 완료 될 때까지 쉘 스크립트를 기다리지 않게하려면 어떻게해야합니까?”)에 따라 올바른 방법은 stdout 및 stderr를 리디렉션하고 쉘은 백그라운드에서 프로그램을 실행합니다.

스크립트 편집기를 사용하여 다음 프로그램을 AppleScript 응용 프로그램으로 저장하십시오.

do Shell script ¬
    "/Applications/Firefox.app/Contents/MacOS/firefox-bin \\
        -P default -no-remote \\
        >/dev/null 2>&1 &"

(기능 범위를“좁게”유지하기 위해 추가되었습니다. ¬\\를 삭제하고 원하는 경우 하나의 긴 줄에 모두 넣으십시오)

Firefox을 (를) 시작할 수있을만큼 오래 실행되며 Firefox이 (가) 계속 실행되는 동안 완전히 종료됩니다.

do Shell script ​​직계 자식 (Shell)이 종료 될 때까지 대기 할뿐만 아니라 파이프에 대해 작성 가능한 파이프의 쓰기 가능한 끝 (모든 인스턴스)을 대기하기 때문에 리디렉션이 필요합니다. 쉘의 stdout과 stderr가 닫힙니다. Shell의 stdout과 stderr (do Shell script의 파이프)는 리디렉션없이 실행되는 프로그램 (&을 사용하여 백그라운드에서 실행되는 프로그램)에 의해 상속됩니다. 리디렉션은 셸이 파이프의 쓰기 가능한 끝을 유지하는 마지막 것임을 보장합니다. 따라서 do Shell script는 Shell이 ​​종료 된 직후에 반환되어 AppleScript 응용 프로그램 자체가 종료되도록합니다 (do Shell script가 AppleScript 프로그램의 마지막 표현식이므로).

open 내부 do Shell script ​​사용하는 다른 답변 open (실제 LaunchServices)는 결과 프로그램을 백그라운드로 보내고 해당 프로그램을 보내는 것과 동일한 작업을 수행하기 때문에 작동합니다. 다른 곳에서 stdout 및 stderr.

7
Chris Johnsen

AppleScript

do Shell script "/Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome --incognito & killall applet"

거기서 두 점.

  1. 백 슬래시로 이스케이프 처리 된 공간은 다시 백 슬래시로 이스케이프됩니다.
  2. killall 애플릿 은 다른 애플릿이 실행될 수 있으므로 문제를 일으킬 수 있습니다
  3. 프로그램으로 저장하십시오.

그러나 그것은 잘 작동 10.6.5

4
anonymous

다음은 .app 자체에 대한 명령 줄 인수를 지정할 수 있도록합니다.

.app 번들을 마우스 오른쪽 단추로 클릭하고 "Show Package Contents"를 선택하고 Info.plist로 이동 한 다음 두 번 클릭하고 Args 키를 찾아 편집하십시오.

나는 OS X 머신을 지금 당장 가지고 있지 않기 때문에 별칭에 대해서도 이것을 수행 할 수 있는지를 확인할 수 없다. (원래 .app 인수를 유지하고 싶다면 등등).

2
Dav

응용 프로그램을 AppleScript 실행 프로그램으로 감싸십시오.

여기 단계가 있습니다.

  1. 다음 내용으로 AppleScript를 생성하고 응용 프로그램으로 저장하십시오 (이 예제에서는 "Firefox 3 launcher.app"라는 이름입니다).

    set pathToApp to (POSIX path of (path to me)) & "Firefox 3.app"
    do Shell script "open -a \"" & pathToApp & "\" --args -P default -no-remote"
    
  2. Finder에서 해당 응용 프로그램을 찾은 다음 마우스 오른쪽 버튼을 클릭하고 패키지 내용을 표시합니다.

  3. 응용 프로그램을 패키지 내용의 루트에 넣으십시오. (이 예제에서는 "Firefox 3.app"가됩니다).

    결과 : /응용 프로그램/Firefox 3 launcher.app/Firefox 3.app

  4. 이제 애플리케이션 시작 관리자를 열 수 있습니다.

노트:

  • 래핑 된 응용 프로그램의 자동 업데이트는 대부분의 경우 작동합니다.
  • 런처에 대한 드래그 앤 드롭을 자동으로 래핑 된 응용 프로그램으로 리디렉션 할 수 있어야합니다 (스크립팅을 조금 더 사용하여).
  • 래핑 된 응용 프로그램이 시작되면 실행 프로그램이 자동으로 종료됩니다.
  • 이 방법의 장점은 래핑 된 응용 프로그램을 직접 여는 위험이 거의 없다는 것입니다.
2
jlgrall

open 명령에는 옵션으로 --args 인수가 있습니다.이 인수는 열린 응용 프로그램에 인수로 전달됩니다. 예 :

open /Applications/TextEdit.app --args example.txt
0
ecnepsnai