OSXでスクリプトからアプリを起動したい。コマンドライン引数を渡す必要があります。残念ながら、open
コマンドライン引数は受け付けません。
私が考えることができる唯一のオプションはnohup myApp > /dev/null &
、アプリを起動するために使用して、アプリを起動するスクリプトとは独立して存在できるようにすることです。
より良い提案はありますか?
OSXでスクリプトからアプリを起動したい。コマンドライン引数を渡す必要があります。残念ながら、open
コマンドライン引数は受け付けません。
私が考えることができる唯一のオプションはnohup myApp > /dev/null &
、アプリを起動するために使用して、アプリを起動するスクリプトとは独立して存在できるようにすることです。
より良い提案はありますか?
回答:
OS X 10.6では、open
コマンドが拡張され、アプリケーションに引数を渡すことができるようになりました。
open ./AppName.app --args -AppCommandLineArg
アプリのバンドルは、コマンドライン引数を渡すことに設計されていないので、しかし、マックOS Xの古いバージョンのために、そして、従来のメカニズムが使用することですアップルのイベントのようなファイルのためにここにココアがアプリまたはのためにここにカーボンのアプリのために。また、環境変数を使用してパラメーターを渡すことによって、何か厄介なことを行うこともできます。
open
、答えが言うように、コマンドラインから機能するようには設計されていません。"なぜ?" それはMac OS Xのやり方だからです。
ここの質問で述べたように、open
10.6 のコマンドにはargs
フラグが付いているので、次のように呼び出すことができます。
open -n ./AppName.app --args -AppCommandLineArg
アプリケーションバンドル(.app
ファイル)は、実際にはディレクトリの集まりです。open
と.app
名前を使用する代わりに、実際にそれに移動して、実際のバイナリを開始できます。例えば:
$ cd /Applications/LittleSnapper.app/
$ ls
Contents
$ cd Contents/MacOS/
$ ./LittleSnapper
これは、引数を受け入れる可能性のある実際のバイナリです(またはLittleSnapper
の場合)。
DYLD_LIBRARY_PATH
、DYLD_FRAMEWORK_PATH
。
MathieuKが提供する手法をお勧めします。私の場合、Chromiumで試す必要がありました。
> Chromium.app/Contents/MacOS/Chromium --enable-remote-fonts
これはOPの問題を解決しないことを理解していますが、うまくいけば他の人の時間を節約できます。:)
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
、私にはうまくいきません。
それぞれが独自のプロファイルを使用する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つのブラウザを別々のデスクトップに置いており、それらの間をナビゲートすることは問題になりませんでした。
以降ではOS Xヨセミテ、我々は今、使用することができたAppleScriptとAutomatorのを複雑なタスクを自動化します。自動化用のJavaScriptをスクリプト言語として使用できるようになりました。
このページでは、 bashおよびosascriptインタラクティブモードを使用してコマンドラインで記述できるスクリプトの例を示します。Safariタブが開き、に移動しexample.com
ます。
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;
アプリのビンへの追加パスを設定しないのはなぜですか。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のアップグレード時に変更を監視する必要があります。
以下を使用してアプリを起動できますopen
。
open -a APP_YOU_WANT
これにより、必要なアプリケーションが開きます。
nohup &
問題を解決しますか?