[macos] 명령 줄을 사용하여 OS X에서 앱 실행

스크립트에서 OSX에서 앱을 시작하고 싶습니다. 명령 줄 인수를 전달해야합니다. 불행히도 open명령 줄 인수를 허용하지 않습니다.

내가 생각할 수있는 유일한 옵션은 nohup myApp > /dev/null &앱을 실행하는 스크립트와 독립적으로 존재할 수 있도록 내 앱을 실행하는 데 사용 하는 것입니다.

더 좋은 제안이 있습니까?



답변

OS X 10.6에서는 open응용 프로그램에 인수를 전달할 수 있도록 명령이 향상되었습니다.

open ./AppName.app --args -AppCommandLineArg

그러나 맥 OS X의 이전 버전에 대한 응용 프로그램 번들이 명령 줄 인수를 전달하도록 설계되지 않고 있기 때문에, 기존의 메커니즘을 사용하는 것입니다 애플 이벤트 파일이 좋아하는 위해 여기에 코코아 앱 또는 위해 여기에 카본 애플리케이션을 위해. 환경 변수를 사용할 때 매개 변수를 전달하여 약간의 작업을 수행 할 수도 있습니다.


답변

여기 질문 에서 언급했듯이 open10.6 의 명령에는 이제 args플래그가 있으므로 다음을 호출 할 수 있습니다.

open -n ./AppName.app --args -AppCommandLineArg


답변

응용 프로그램 번들 ( .app파일)은 실제로 여러 디렉토리입니다. open.app이름 을 사용하는 대신 실제로 이동하여 실제 바이너리를 시작할 수 있습니다. 예를 들면 :

$ cd /Applications/LittleSnapper.app/
$ ls
Contents
$ cd Contents/MacOS/
$ ./LittleSnapper

그것은 인수를 받아 들일 수있는 실제 바이너리입니다 ( LittleSnapper‘의 경우).


답변

앱이 파일에서 작동해야하는 경우 (일반적으로 전달 될 것으로 예상되는 파일 🙂 ./myApp *.jpg, 다음과 같이 수행합니다.

open *.jpg -a myApp


답변

MathieuK가 제공하는 기술을 추천합니다. 제 경우에는 Chromium으로 시도해야했습니다.

> Chromium.app/Contents/MacOS/Chromium --enable-remote-fonts

나는 이것이 OP의 문제를 해결하지 못한다는 것을 알고 있지만, 다른 누군가의 시간을 절약하기를 바랍니다. 🙂


답변

open또한 애플리케이션 폴더 내에서 이름 (또는 -b 플래그가있는 번들 식별자)로 앱을 여는 데 사용할 수있는 -a 플래그가 있습니다. 이것을 –args 옵션과 결합하여 원하는 결과를 얻을 수 있습니다.

open -a APP_NAME --args ARGS

팩터 2x 및 루프로 확장되어야하는 VLC 플레이어에서 비디오를 열려면 예를 들어 다음과 같이합니다.

open -a VLC --args -L --fullscreen

터미널에 명령 출력을 가져올 수 없습니다. (나는 그것을 해결하기 위해 아무것도 시도하지 않았지만)


답변

각각 고유 한 프로필을 사용하는 두 개의 개별 Chrome 인스턴스를 실행하고 싶었습니다. Mac 앱을 시작하는 습관처럼 Spotlight 에서 시작할 수 있기를 원했습니다 . 즉, regChrome일반 브라우징과 altChrome특수 프로필을 사용하기 위해 두 개의 일반 Mac 응용 프로그램이 필요 했습니다. ⌘-space를 눌러 Spotlight를 불러 온 다음 ‘reg’또는 ‘alt’를 누른 다음 Enter 키를 눌러 쉽게 시작할 수 있습니다.

위의 목표를 달성하는 무차별 대입 방법은 각 이름으로 Google 크롬 응용 프로그램 번들의 복사본을 두 개 만드는 것입니다. 그러나 그것은 추악하고 업데이트를 복잡하게 만듭니다.

결국 두 개의 명령을 포함하는 두 개의 AppleScript 응용 프로그램을 사용하게되었습니다. 다음은 다음과 같습니다 altChrome.

do shell script "cd /Applications/Google\\ Chrome.app/Contents/Resources/; rm app.icns; ln /Users/garbuck/local/chromeLaunchers/Chrome-swirl.icns app.icns"
do shell script "/Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome --user-data-dir=/Users/garbuck/altChrome >/dev/null 2>&1 &"

두 번째 줄은 대체 프로필 ( --user-data-dir매개 변수)로 Chrome을 시작합니다 .

첫 번째 줄은 두 응용 프로그램에 고유 한 아이콘을 제공하려는 시도가 실패한 것입니다. 처음에는 제대로 작동하는 것처럼 보입니다. 그러나 조만간 Chrome은 아이콘 파일을 다시 읽고 두 앱 중 마지막에 시작된 앱에 해당하는 파일을 가져와 동일한 아이콘으로 두 개의 실행중인 응용 프로그램을 만듭니다. 그러나 나는 그것을 고치려고 노력하지 않았습니다. 나는 두 개의 브라우저를 별도의 데스크톱에 유지하고 그 사이를 탐색하는 것은 문제가되지 않았습니다.