Як передати аргументи командного рядка до елементів 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

Зберігайте в будь-якому місці.

Щоб замінити піктограму цієї програми, отримайте інформацію про ваш справжній 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

Тепер закрийте Terminal і перенесіть свою програму (яка зараз не повинна працювати) в іншу папку та поверніться знову. Це оновить Служби запуску , інакше ваші зміни будуть проігноровані та дуже дратують вас.

Тепер, коли ви відкриєте свою програму, вона фактично виконає .shфайл, який, у свою чергу, запустить власне виконуваний файл, надсилаючи разом з ним аргументи командного рядка.

Він буде виглядати та вести себе так, як ви цього очікуєте, але вам потрібно буде повторювати це щоразу, коли ви оновлюєте свою програму, оскільки це, як правило, замінить комплект програми та всі внесені вами зміни.


З якоїсь причини мій Chrome 10 ігнорує аргумент командного рядка та автоматично запирає вкладки, які були зафіксовані в попередньому сеансі. Не знаю, що тут не так, оскільки я не користувач Chrome і не знаю, як це потрібно поводити.
Даніель Бек

6
"перенесіть свою програму в іншу папку та поверніться знову" має бути жирним - повністю пропустив її при першому читанні :)
stephanos

1
Чи є спосіб оновити / скинути / перезапустити Служби запуску за допомогою команди оболонки, щоб вам не довелося переміщати програму назад і назад? тобто, щоб цей крок був легко прописаний?
Джордан Бро

1
@ Джордан Бро Ви можете використовувати утиліту lsregister, щоб змусити оновити LaunchServices:/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f /Applications/Hello\ World.app
Буде Росс

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(ваш сценарій) після закінчення. Я фактично назвав свій скрипт start.sh і символізував його до Google \ Chrome для зручності оновлень.
Орвелофіл

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