programing tip

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

itbloger 2020. 8. 16. 19:56
반응형

명령 줄을 사용하여 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

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


OS X Yosemite 부터 이제 AppleScriptAutomator사용 하여 복잡한 작업을 자동화 할 수 있습니다. 이제 자동화 용 JavaScript를 스크립팅 언어로 사용할 수 있습니다.

이 페이지는 bash 및 osascript 대화 형 모드를 사용하여 명령 줄에서 작성할 수 있는 좋은 예제 스크립트제공 합니다. Safari 탭이 열리고로 이동합니다 example.com.

http://developer.telerik.com/featured/javascript-os-x-automation-example/
osascript -l JavaScript -i
Safari = Application("Safari");
window = Safari.windows[0];
window.name();
tab = Safari.Tab({url:"http://www.example.com"});
window.tabs.push(tab); 
window.currentTab = tab;

applescript 사용 :

tell application "Firefox" to activate

각각 고유 한 프로필을 사용하는 두 개의 개별 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은 아이콘 파일을 다시 읽고 두 앱 중 마지막에 시작된 앱에 해당하는 파일을 가져와 동일한 아이콘으로 두 개의 실행중인 응용 프로그램을 만듭니다. 그러나 나는 그것을 고치려고 노력하지 않았습니다. 나는 두 개의 브라우저를 별도의 데스크톱에 유지하고 그 사이를 탐색하는 것은 문제가되지 않았습니다.


앱의 저장소에 경로 추가를 설정하지 않는 이유는 무엇입니까? MacVim의 경우 다음을 수행했습니다.

export PATH=/Applications/MacVim.app/Contents/bin:$PATH

별칭은 내가 시도한 또 다른 옵션입니다.

alias mvim='/Applications/MacVim.app/Contents/bin/mvim'
alias gvim=mvim 

내보내기 PATH를 사용하여 앱의 모든 명령을 호출 할 수 있습니다. MacVim을 사용한 테스트에서 인수가 잘 통과되었습니다. 별칭은 빈에있는 각 명령의 별칭을 지정해야했습니다.

mvim README.txt
gvim Anotherfile.txt

Enjoy the power of alias and PATH. However, you do need to monitor changes when the OS is upgraded.


Simple, here replace the "APP" by name of the app you want to launch.

export APP_HOME=/Applications/APP.app/Contents/MacOS
export PATH=$PATH:$APP_HOME

Thanks me later.

참고URL : https://stackoverflow.com/questions/1308755/launch-an-app-on-os-x-with-command-line

반응형