Как передать аргументы командной строки элементам Dock?


Ответы:


96

У вас есть в основном два варианта:

Вариант 1. Используйте Automator для создания приложения, которое фактически запускает Chrome с аргументами командной строки.

Запустите Automator и выберите, чтобы создать приложение . Дважды щелкните « Запустить сценарий оболочки» в папке « Библиотека / утилиты » и замените текстовое содержимое catследующим текстом :

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

Сохранить где угодно.

Чтобы заменить значок этого приложения, Get Info на реальном Google Chrome, нажмите на значок в левом верхнем углу, нажмите Cmd-C, Получить информацию о вашем приложении Chrome Automator, нажмите на значок и нажмите Cmd-V.

Поскольку это другое приложение, при запуске Dock будет отображаться два приложения Chrome: Chrome и ваша программа запуска Chrome.


Вариант 2 : отредактируйте пакет приложения, чтобы вместо этого запустить скрипт. Этот скрипт запустит реальное приложение, добавив аргумент командной строки.

Щелкните правой кнопкой мыши Google Chrome.appи выберите « Показать содержимое пакета» . Перейдите Contents/и откройте Info.plistв редакторе списков свойств / Xcode (инструменты разработчика Apple) или сторонний plistредактор.

Ищите запись CFBundleExecutableили Executable File. Запомните его значение (например, firefox-binдля Firefox). Замените это на 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 с помощью команды оболочки, чтобы вам не приходилось перемещать приложение назад и обратно? то есть, чтобы этот шаг был легко сценарием?
Джордан Бро

1
@Jordan Brough Вы можете использовать утилиту lsregister для принудительного обновления LaunchServices:/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f /Applications/Hello\ World.app
Will Ross

1
Конечно, Вариант 2 работает только с приложениями, отличными от CodeSign. Если он исходит от Apple или магазина приложений, он подписан против изменений. Даже изменение в Info.plist остановит это. В этом случае может помочь простое приложение-заглушка / обертка.
CDE

10

Вы можете написать скрипт, который запускает Chrome, но это не будет значок приложения в доке, и это приведет к появлению отдельного значка Chrome. Так что вам придется создать пакет приложения.

Сначала сделайте копию своего приложения Chrome. Тогда есть два подхода, которые могут работать; Я не уверен, что будет лучше играть с 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, в частности. Возможно даже, что исполняемый файл Chrome на Mac не поддерживает эту опцию, поскольку приложения Mac, как правило, не запускаются с управляемыми параметрами командной строки (в отличие, например, от Windows, где приложения обычно запускаются с помощью ярлыков, которые могут есть встроенные опции).


Параметры поддержки Chrome, я просто автоматизировал мои, следуя вашей инструкции # 2. Вам действительно нужно указать полный путь для двоичного файла, и не забудьте chmod 755 Google\ Chrome(ваш скрипт) после того, как вы закончите. Я на самом деле назвал свой скрипт launch.sh и вставил ссылку в Google \ Chrome для удобства обновлений.
Орвеллофил

Обратите внимание, что изменение содержимого пакета вызывает проблемы с подписанием кода, в результате чего возникают странные проблемы, такие как https, который не работает должным образом: bridge.grumpy-troll.org/2011/01/…
drevicko
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.