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 &
これが私の最善の解決策です:でApplescriptを作成します。
do Shell script "/Applications/Firefox.app/Contents/MacOS/firefox -P default -no-remote & killall Firefox.app"
そしてそれをアプリケーションとして保存してください。
あなたは最初の部分でどんな引数でどんなアプリケーションでも置くことができます。 &
の後の部分は、あなたのスクリプトに+ .appという名前を付けたものは何でもkillする必要があります。スクリプトアプリがドック内で点滅するのがわかりますが、その後消えます。
注:スクリプトは、スクリプトエディタから実行した場合は正しく機能しません。作成したスクリプトアプリケーションから実行した場合のみです。
OS X 10.6.2以降では、openコマンドは--argsフラグを使用して、開くアプリケーションに引数を渡すことができます。それを使うためのAppleScriptはこのようになります:
do Shell script "open -a /Applications/Firefox.app --args -P default -no-remote"
それはあなたが望むすべての振る舞いをあなたに与えるでしょう。
Automatorを開き、 Application を単一の シェルスクリプトの実行 アクションで作成します。
/Applications/Firefox.app/Contents/MacOS/firefox-bin -here-some-args &
このアプリケーションはFirefoxを起動して即座に終了し、Firefoxのみを実行したままにします。
または、AppleScript Editorを使用して次のAppleScriptコードでアプリケーションを作成します。
do Shell script "open -a '/Users/danielbeck/Applications/Firefox.app' --args -ProfileManager"
どちらも問題なく動作し、Terminalやスクリプトアプリケーションを1秒以上動作させることはありません。 Automatorを使うと、 Service を作成することさえできます。
これは古い議論ですが、それでもグーグル検索で出てくるので、私はいくつかの¢を加えたいと思いました。
実行可能ファイルへの絶対パスではなく、「バンドル識別子」を使用することをお勧めします。
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を走らせているならば、そして "Profile 2"で別のものが、そしてChromeはまだ "Profile 1"として別のウィンドウを開くだけである) :(
このシナリオでは、親のAppleScriptアプリケーションプロセス(「アプレット」)を強制終了するために killall (または同様の方法)を使用する必要はありません(他の回答からもわかるとおり)。 killall に指定された名前/パターンが、親アプレットプロセスだけでなく、他のAppleScriptアプリケーションを同時に実行している場合(パターンとして「アプレット」を使用している場合など)。
kill $PPID
のようなものがより合理的かもしれませんが、AppleScriptアプリケーションのアプレットが常に doシェルスクリプト で始まるシェルの直接の親であると仮定したくないかもしれません。幸いなことに、あなたが必要とすることをするのに完全に合理的な方法があります。
TN2065 あたり(「バックグラウンドサーバープロセスを開始したい。コマンドが完了するまでシェルスクリプトを待機させないにはどうすればよいですか?」の下に)、適切な方法は、stdoutとstderrをリダイレクトし、シェルにバックグラウンドでプログラムを実行させることです。
次のプログラムをAppleScriptアプリケーションとして保存するには、 スクリプトエディタ を使用します。
do Shell script ¬
"/Applications/Firefox.app/Contents/MacOS/firefox-bin \\
-P default -no-remote \\
>/dev/null 2>&1 &"
(機能的な改行は「狭く」するために追加されました。必要に応じて¬
と\\
を削除して1行にまとめてください)
Firefox を起動するのに十分な長さで実行され、 Firefox が実行を継続している間は正常に終了します。
do Shellスクリプト が直接の子(Shell)が終了するのを待つだけでなく、シェルのために作成したパイプの書き込み可能な端(のすべてのインスタンス)も待つため、リダイレクトが必要です。標準出力と標準エラー出力を閉じます。シェルの標準出力および標準エラー出力( doシェルスクリプト のパイプ)は、リダイレクトせずに実行されるプログラム(&
を使用してバックグラウンドで実行されるものでも)によって継承されます。リダイレクトによって、シェルがパイプの書き込み可能な最後を保持する最後のシェルになります。したがって、 do Shellスクリプト はShellの終了直後に戻り、AppleScriptアプリケーション自体を終了させることができます( do Shellスクリプト がAppleScriptプログラムの最後の式であるため)。
open inside doシェルスクリプト workを使用する他の答えは、 open (実際にはLaunchServices)は、結果のプログラムをバックグラウンド化し、その標準出力と標準エラーを送信するのと同じこと他の場所で。
AppleScript
do Shell script "/Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome --incognito & killall applet"
2点あります。
しかしそれは10.6.5でもうまくいきます。
次は、.app自体のコマンドライン引数を指定するのを許可します。
.appバンドルを右クリックして[パッケージの内容を表示]を選択し、Info.plistに移動してダブルクリックし、Argsキーを見つけて編集します。
現時点では、私はOS Xマシンを手元に持っていないので、エイリアスにもこれを実行できるかどうかを確認することはできません(元の.appを引数フリーにしたい場合など)。
アプリケーションをAppleScriptランチャー内にラップします。
これがステップです。
次の内容の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"
Finderでそのアプリに移動し、右クリックしてパッケージの内容を表示します。
アプリケーションをパッケージの内容のルートに置きます。 (この例では「Firefox 3.app」になります)
結果:/アプリケーション/ Firefox 3 launcher.app/Firefox 3.app
これでアプリケーションランチャーを開くことができます。
ノート:
open
コマンドにはオプションの--args
引数があり、その値は開かれたアプリケーションに引数として渡されます。例えば:
open /Applications/TextEdit.app --args example.txt