Есть ли простой способ добавить аргументы командной строки в приложение на 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 , лучше всего использовать скрипт для запуска приложения с аргументами. Добавление &
в конец скрипта убивает постоянное окно терминала. Единственное раздражение сейчас заключается в том, что он открывает мертвое окно терминала, вышедшее из системы (что лучше, чем постоянное, но все же ...)
#!/bin/sh
/Applications/Firefox.app/Contents/MacOS/firefox -P default -no-remote &
источник
&
которое по-прежнему принадлежит Терминалу, вы можете исправить это, добавив строкуdisown %/Applications/Firefox.app/Contents/MacOS/firefox
после запуска, затем вы можете безопасно закрыть Терминал, используя AppleScript.Ответы:
Вот мое лучшее решение: создайте Applescript с помощью:
И сохраните его как приложение .
Вы можете поместить любое приложение с любыми аргументами в первой части. Часть после
&
должна убить все, что вы назвали ваш скрипт + .app. Вы увидите, что приложение-скрипт вспыхивает в доке, но затем исчезает.Примечание. Сценарий не будет работать должным образом при запуске из редактора сценариев, а только при запуске из созданного вами приложения сценария.
источник
Начиная с OS X 10.6.2, команда open может передавать аргументы приложению, которое она открывает, с помощью флага --args. Используемый AppleScript выглядит следующим образом:
Это должно дать вам все поведение, которое вы хотите.
источник
--args
с Chrome, и он не работает. Это будет работать только для первого экземпляра . Если вы попытаетесь запустить два--user-data-dir
одновременно, вы не сможете сделать это сopen
помощью старого/applications...
метода. Кто-нибудь знает, почему ебать--args
не работает?Откройте Automator и создайте приложение с помощью одного действия Run Shell Script :
Это приложение запустит Firefox и сразу же закроется, оставив только работающий Firefox.
Или создайте приложение с помощью AppleScript Editor со следующим кодом AppleScript:
Оба работают нормально и не поддерживают приложение Terminal или скрипт более чем на секунду или около того. Используя Automator, вы можете даже создать Службу, если захотите.
источник
open --args
было реализовано в 10.6.2, как уже упоминал Боб.open eclipse.app -n
открыть второе рабочее пространство Eclipse. Очень удобно. Спасибо!Это старая дискуссия, но она все еще подходит для поиска в Google, поэтому я решил добавить пару ¢.
Вероятно, лучше использовать «идентификатор пакета», а не абсолютный путь к исполняемому файлу:
Или в сценарии Apple:
Что я еще не понял, так это как открыть новый экземпляр / окно с другим профилем, как только первый уже открыт. (Если я запустил AppleScript выше, затем еще один с «Профилем 2», тогда Chrome все равно просто откроет другое окно как «Профиль 1»). :(
источник
В этом сценарии нет необходимости (как предлагали некоторые другие ответы) использовать killall (или аналогичный) для уничтожения родительского процесса приложения AppleScript («апплет»). Это может даже иметь неблагоприятные побочные эффекты, если имя / шаблон, заданный для killall, совпадает с чем-то большим, чем просто процесс родительского апплета (например, другой, одновременно запускающий приложения AppleScript (если в качестве шаблона используется «апплет»)).
Нечто подобное
kill $PPID
может быть более разумным, но мы можем не предполагать, что апплет приложения AppleScript всегда является непосредственным родителем оболочки, запускаемой скриптом do shell . К счастью, есть совершенно разумный способ сделать то, что вам нужно.В соответствии с TN2065 (в разделе «Я хочу запустить фоновый серверный процесс; как сделать так, чтобы сценарий оболочки не ожидал завершения выполнения команды?»), Правильный метод - перенаправить stdout и stderr и заставить оболочку запускать программу в фоновом режиме. ,
Используйте Script Editor, чтобы сохранить следующую программу как приложение AppleScript:
(добавлены функциональные разрывы строк, чтобы сделать его «узким»; удалите
¬
и\\
и поместите все в одну длинную строку, если хотите)Он будет работать достаточно долго для запуска Firefox и будет корректно завершать работу, пока Firefox продолжает работать.
Перенаправление является обязательным, поскольку сценарий оболочки не только ожидает выхода своего непосредственного дочернего элемента (оболочки), но также ожидает (все экземпляры) доступных для записи концов каналов, которые он создает для закрытия оболочки stdout и stderr. , Stdout и stderr оболочки ( делают каналы сценария оболочки ) наследуются программами, которые запускаются без перенаправления (даже те, которые выполняются в фоновом режиме
&
); перенаправление гарантирует, что оболочка является последней, которая содержит доступные для записи концы каналов. Таким образом, сценарий do shell будет возвращен сразу после выхода из оболочки, что позволит завершить работу самого приложения AppleScript (поскольку сценарий do shell является последним выражением в программе AppleScript).Другие ответы, которые используют open inside, выполняют работу сценария оболочки, потому что open (фактически LaunchServices) выполняет эквивалентную работу по фонованию результирующей программы и отправке ее stdout и stderr в другое место.
источник
open --args
выглядит чище. Есть ли какой-либо недостаток при использовании любого из них?open --args
, вероятно, все в порядке.AppleScript
Две точки там.
Однако это хорошо работает на 10.6.5
источник
applet
относится к?Следующее должно позволить вам указать аргументы командной строки для самого .app:
Щелкните правой кнопкой мыши по пакету .app, выберите «Показать содержимое пакета», перейдите к Info.plist, дважды щелкните его, найдите ключ Args, отредактируйте.
В данный момент у меня нет под рукой машины с OS X, поэтому я не могу проверить, можете ли вы также сделать это с псевдонимом (если вы хотите оставить исходный .app без аргументов и т. Д.).
источник
Оберните ваше приложение в программе запуска AppleScript.
Вот шаги.
Создайте AppleScript со следующим содержимым и сохраните его как приложение (в данном примере он называется «Firefox 3 launcher.app»).
Зайдите в это приложение в Finder, щелкните по нему правой кнопкой мыши, покажите содержимое пакета.
Поместите ваше приложение в корень содержимого пакета. (В этом примере это будет «Firefox 3.app»)
Результат: / Приложения / Firefox 3 launcher.app/Firefox 3.app
Теперь вы можете открыть панель запуска приложений.
Примечания:
источник
Почему вы не используете:
Просто, но это работает.
источник
У
open
команды есть необязательный--args
аргумент, значение которого будет передано открытому приложению в качестве аргументов. Например:источник