Dockアイテムにコマンドライン引数を渡すにはどうすればよいですか?


回答:


96

基本的に2つのオプションがあります。

オプション1:Automatorを使用して、コマンドライン引数でChromeを実際に起動するアプリケーションを作成します。

Automatorを起動し、アプリケーションの作成を選択します。ダブルクリックして実行シェルスクリプトの中でライブラリ/ユーティリティフォルダとテキストの内容を置き換える- cat-次のように:

open -a "Google Chrome.app" --args -pinned-tab-count=4
# keep the .app suffix or will break with Parallels

好きな場所に保存します。

このアプリケーションのアイコンを置き換えるには、情報を見る、左上のアイコンを押しをクリックして、あなたの本当のGoogle Chromeの上でCmd-C情報を見る、ChromeのAutomatorのアプリのアイコン、および押しをクリックしてくださいCmd-V

別のアプリケーションであるため、Dockは実行中に2つのChromeアプリケーション(ChromeとChromeランチャー)を表示します。


オプション2:アプリケーションバンドルを編集して、代わりにスクリプトを起動します。このスクリプトは実際のアプリケーションを起動し、コマンドライン引数を追加します。

右クリックGoogle Chrome.appして[ パッケージの内容を表示 ] を選択します。移動しContents/、オープンInfo.plistプロパティリストエディタ/ Xcodeの(Appleの開発者向けツール)、またはサードパーティのplistエディタ。

エントリCFBundleExecutableまたはを探しExecutable Fileます。その価値を思い出してください(例:firefox-binFirefox)。に置き換えparameterized-app.shます。

ターミナルを開き、次を入力します。

touch /Applications/Firefox.app/Contents/MacOS/parameterized-app.sh
open /Applications/Firefox.app/Contents/MacOS/parameterized-app.sh

.shファイルのエディターが開きます。ファイルの内容を次のように設定します。

#!/usr/bin/env bash
exec /Applications/Firefox.app/Contents/MacOS/firefox-bin -ProfileManager

(から削除した実際の実行可能ファイルの名前を使用してInfo.plist、目的のコマンドライン引数を追加します)

保存して閉じます。ターミナルで、次を入力します。

chmod +x /Applications/Firefox.app/Contents/MacOS/parameterized-app.sh

ここで、ターミナルを閉じて、アプリケーション(今は実行してはならない)を別のフォルダーに移動し、再び戻します。これによりLaunch Servicesが更新されます。更新されない場合、変更は無視され、非常にイライラさせられます。

これで、アプリケーションを開くと、.shファイルが実際に実行され、実際の実行可能ファイルが起動され、コマンドライン引数が送信されます。

見た目と動作は期待どおりですが、アプリケーションを更新するたびにこれを繰り返す必要があります。これは通常、アプリケーションバンドルと行ったすべての変更を置き換えるためです。


何らかの理由で、Chrome 10はコマンドライン引数を無視し、前のセッションで固定されたタブを自動固定します。ここで何が間違っているのかわからない、私はChromeユーザーではないので、どのように動作するのかわからない。
ダニエルベック

6
「アプリケーションを別のフォルダーに移動してから元に戻す」は太字になります-最初の読み取りで完全に見逃しました:)
stephanos

1
シェルコマンドを使用してLaunch Servicesを更新/リセット/再起動する方法はありますか?アプリケーションを前後に移動する必要はありませんか?すなわち、そのステップが簡単にスクリプト化できるように?
ジョーダンブロー14

1
@JordanブラフあなたはLaunchServicesの更新を強制的にlsregisterユーティリティを使用することができます/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f /Applications/Hello\ World.app
ウィル・ロス

1
もちろん、オプション2は非CodeSignアプリでのみ機能します。アップルまたはアプリストアからのものである場合、変更に対して署名されます。Info.plistを変更しても停止します。その場合、簡単なスタブ/ラッパーアプリが役立ちます。
cde

10

Chromeを起動するスクリプトを作成できますが、それはドックのアプリケーションアイコンではなく、別のChromeアイコンが表示されます。そのため、アプリケーションパッケージを作成する必要があります。

まず、Chromeアプリのコピーを作成します。次に、動作する可能性のある2つのアプローチがあります。どちらがMac OS XやChromeの自己更新でうまくいくかはわかりません。

  1. 引数を指定してChromeを呼び出す「ランチャー」を作成します。

    • アプリパッケージを開き(右クリック→Finderでパッケージの内容を表示)、Info.plist、PkgInfo、およびMacOSを除くすべてを破棄します。
    • MacOSフォルダーで、「Google Chrome」実行可能ファイルを削除し、実際のChromeを呼び出すシェルスクリプトに置き換えます。

      #!/bin/sh
      exec '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome' -pinned-tab-count=4
      

      chmod +xスクリプトを忘れないでください。
       

  2. 実際に実行するChromeパッケージを変更します。

    • MacOSフォルダーで、「Google Chrome」の名前を変更し、追加の引数で本物を呼び出すシェルスクリプトを記述します。

      #!/bin/sh
      exec '/Applications/My Modified Google Chrome.app/Contents/MacOS/Google Chrome-real' -pinned-tab-count=4
      
    • Chromeパッケージにはコード署名に関するものがあります。これらの変更を実行しCodeResourcesたり、削除したりする必要があるかもしれません_CodeSignature

これはすべて、Macアプリパッケージの私の理解に基づいています。特にこれらの変更をChromeで実際にテストしたことはありません。Macアプリケーションは、一般的に制御可能なコマンドラインオプションを使用して実行されることが予想されていないように、アプリケーションがされているたとえば、Windows、とは違って(、Mac上で実行可能なクロームは、このオプションをサポートしていないということにもかのうです通常どのできるショートカットから起動します埋め込みオプションがあります)。


Chromeはパラメーターをサポートしています。私はあなたの指示2に従って鉱山を自動化しました。実際、バイナリの完全なパスを指定する必要があります。また、chmod 755 Google\ Chrome終了後に(スクリプト)を忘れないでください。実際にスクリプトにlaunch.shという名前を付け、更新を簡単にするためにGoogle \ Chromeにシンボリックリンクしました。
-Orwellophile

パッケージの内容を変更すると、コード署名に関する問題が発生し、httpsが正しく機能しないなどの奇妙な問題が発生することに注意してください。bridge.grumpy
troll.org
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.