コマンドラインを使用してOS Xでアプリを起動する


108

OSXでスクリプトからアプリを起動したい。コマンドライン引数を渡す必要があります。残念ながら、openコマンドライン引数は受け付けません。

私が考えることができる唯一のオプションはnohup myApp > /dev/null &、アプリを起動するために使用して、アプリを起動するスクリプトとは独立して存在できるようにすることです。

より良い提案はありますか?


質問についていけません。「open」はコマンドライン引数を受け入れませんか?「オープン」とは何ですか?これはAppleScriptを開いていますか?はどのようにnohup &問題を解決しますか?
S.Lott、2009

4
man open(1)-ファイルまたはアプリを起動するOS Xコマンド
Ned Deily

3
これは、superuser.comにあるはずです
ジェフミートボールヤン

回答:


78

OS X 10.6では、openコマンドが拡張され、アプリケーションに引数を渡すことができるようになりました。

open ./AppName.app --args -AppCommandLineArg

アプリのバンドルは、コマンドライン引数を渡すことに設計されていないので、しかし、マックOS Xの古いバージョンのために、そして、従来のメカニズムが使用することですアップルのイベントのようなファイルのためにここにココアがアプリまたはのためにここにカーボンのアプリのために。また、環境変数を使用してパラメーターを渡すことによって、何か厄介なことを行うこともできます。


私の厄介なアプローチは、nohupを使用してコマンドライン引数を使用して実行可能ファイルを直接呼び出すことです-environment-vars-kludgeの負担が少ない場合は?
psychotik

2
おそらく違います。それがあなたのために働くなら、それと一緒に行ってください。より大きなポイントは、open(1)は、ユーザーがFinderでダブルクリックまたは「開く」を実行したときに発生するcliに相当し、これらのメカニズムのいずれも従来のコマンドライン引数をサポートしないことです。
ネッドデイリー2009

+1:Mac OS X GUIアプリケーションではコマンドライン引数を使用しないでください。
S.Lott、2009

2
コマンドライン引数を使用しないようにGoogleに指示する、Applications / Google Chrome.app/Contents/Versions/6.0.472.53/Google Chrome Helper.app/Contents/MacOS/Google Chrome Helper --type = renderer --lang = en-US- -force-fieldtest
Anurag Uniyal

@Anurag Uniyal。"なぜ?" 答えを読みましたか?「従来のメカニズムは、Cocoaアプリの場合はここ、Carbonアプリの場合はここのようなファイルにAppleイベントを使用することです。」これがMac OS Xの設計方法です。はい。Chromeはルールを破ります。Linuxコマンドラインユーティリティも同様です。しかし、で開かれたGUIアプリケーションはopen、答えが言うように、コマンドラインから機能するようには設計されていません。"なぜ?" それはMac OS Xのやり方だからです。
S.Lott、

105

ここの質問述べたように、open10.6 のコマンドにはargsフラグが付いているので、次のように呼び出すことができます。

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


要求されたとおりに機能します。おかげで
DTdev 2013年

これでうまくいき、Chromiumのzshエイリアスを設定できました。ありがとう
jamescampbell

この答えは素晴らしいです。ターミナルを最初に開いたときにホームディレクトリにいることを追加したかったので、アプリケーションディレクトリに切り替える必要がないように、このように入力します。フォントを読み込まずにGimpを実行したいので、時間がかかります。これを-fスイッチで入力してフォントを省略しました。open-n /Applications/GIMP.app --args -f
James Toomey

32

アプリケーションバンドル(.appファイル)は、実際にはディレクトリの集まりです。open.app名前を使用する代わりに、実際にそれに移動して、実際のバイナリを開始できます。例えば:

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

これは、引数を受け入れる可能性のある実際のバイナリです(またはLittleSnapperの場合)。


3
バイナリは引数を受け入れると確信しています。私はそれを書きました。'open'を呼び出すと、引数を渡すことができません。私はこれについてかなり確信しています。そして、はい、私のスクリプトはバンドルを開くのではなく、「オープンバイナリ」を直接呼び出しています。
psychotik

@psychotik:彼は「オープンバイナリ」と呼ぶつもりはありません。彼はバイナリを直接実行すると言っています。
チャック

それは私にはうまくいきません。バイナリを直接実行すると、スクリプトの子プロセスになるため、絶対に必要ありません。したがって、open / nohupを使用する必要がある
psychotik

1
シェルスクリプトの場合は、「exec」を使用して、スクリプトプロセスを実際の実行可能ファイルに置き換えます。
ジョナサンレフラー、

2
このアプローチは大きな欠点があります:バンドルはカスタムライブラリやフレームワークが含まれている場合、あなたはをいじる必要がありますDYLD_LIBRARY_PATHDYLD_FRAMEWORK_PATH
ulidtko

14

アプリがファイルを処理する必要がある場合(通常、次のように渡されることを期待し./myApp *.jpgます)は、次のようにします。

open *.jpg -a myApp

これはまさに私が探していたものです!たとえば、私のインスタンス化: open something.py -a Eclipse.app
Eric

4

MathieuKが提供する手法をお勧めします。私の場合、Chromiumで試す必要がありました。

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

これはOPの問題を解決しないことを理解していますが、うまくいけば他の人の時間を節約できます。:)


@Pacerierこのコマンドの最後に `&`を追加します。バックグラウンドで起動します。その後、ターミナルウィンドウを閉じても、アプリケーションは開いたままになる可能性があります。
ポールアイリッシュ

2

openまた、-aフラグがあり、これを使用して、Applicationsフォルダー内から名前で(または-bフラグを指定したバンドルIDで)アプリを開くことができます。これを--argsオプションと組み合わせて、必要な結果を得ることができます。

open -a APP_NAME --args ARGS

2倍に拡大縮小してループするVLCプレーヤーでビデオを開くには、たとえば次のように実行します。

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

端末へのコマンドの出力を取得できなかったことに注意してください。(私はそれを解決するために何もしませんでしたが)


open -a意図的に繰り返しましたか?とにかく open -a /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --args --user-data-dir=/Users/an/userll、私にはうまくいきません。
パセリエ2017

すみません、なんらかの理由で構文が完全にオフになっています。今すぐ更新します。
rien333

2

それぞれが独自のプロファイルを使用する2つのChromeインスタンスを実行したいと思っていました。Macアプリを起動する私の習慣と同様に、Spotlightから起動できるようにしたかったのです。つまり、regChrome通常のブラウジングとaltChrome特別なプロファイルを使用するために、⌘スペースを押してSpotlightを起動し、次に「reg」または「alt」を押してからEnterを押す。

上記の目標を達成するための力ずくの方法は、それぞれの名前でGoogle Chromeアプリケーションバンドルの2つのコピーを作成することだと思います。しかし、それは醜く、更新を複雑にします。

結局、それぞれ2つのコマンドを含む2 つの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 &"

2行目は、代替プロファイル( --user-data-dirパラメーター)でます。

最初の行は、2つのアプリケーションに異なるアイコンを表示する試みの失敗です。最初は問題なく動作しているようです。ただし、遅かれ早かれ、Chromeはアイコンファイルを再読み取りし、最後に開始された2つのアプリのいずれかに対応するものを取得します。その結果、同じアイコンを持つ2つのアプリケーションが実行されます。しかし、私はそれを修正しようとする気になりませんでした—私は2つのブラウザを別々のデスクトップに置いており、それらの間をナビゲートすることは問題になりませんでした。


2

以降ではOS Xヨセミテ、我々は今、使用することができた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の自動化を利用できるアプリのリストについては、スクリプトエディター/ウィンドウ/ライブラリを確認してください。ChromeベースのVysorを探していましたが、別の方法が必要だと思います。
AnneTheAgile

より複雑なftw!
Pacerier 2017

1

applescriptを使用:

tell application "Firefox" to activate

Firefoxに引数をどのように渡しますか?例:-no-remote -P "別のプロファイル"。アドオンなどを開発する場合、2つの別個のプロファイルを使用して2つの別個のFirefoxプロセスを用意すると便利です。通常のプロファイルと、拡張機能をデバッグするためのサンドボックス。
George

あなたはAppleScriptディレクティブを参照していると思いますが、問題はコマンドラインから開くことです...
conny

0

アプリのビンへの追加パスを設定しないのはなぜですか。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

エイリアスとパスの力をお楽しみください。ただし、OSのアップグレード時に変更を監視する必要があります。


「MacOSはLinuxベースであることを忘れないでください」。いいえ、違います。macOSとLinuxは1行のコードを共有しません。MacOSは、FreeBSDベースのカーネルを備えたUNIXです。
トーマス

変更されます。私は宗教戦争を作りたくありません。目標は、MacOSユーザーが利用できるいくつかの強力なオプションがあることをコミュニティに知らせることでした。
zerocog

もちろん問題ありません!:)
トーマス

0

簡単です。ここで、「APP」を起動するアプリの名前に置き換えます。

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

後でありがとう。


0

以下を使用してアプリを起動できますopen

open -a APP_YOU_WANT

これにより、必要なアプリケーションが開きます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.