Как я могу запустить приложение с аргументами командной строки в Mac OS

есть ли простой способ добавить аргументы командной строки в приложение на 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 page лучше всего использовать скрипт для запуска приложения с аргументами. Добавление & до конца скрипт убивает персистентное окно терминала. Единственное раздражение теперь заключается в том, что он открывает мертвое окно терминала (которое лучше, чем настойчивый, но все же...)

#!/bin/sh
/Applications/Firefox.app/Contents/MacOS/firefox -P default -no-remote &
28
задан Andrew
01.04.2023 12:39 Количество просмотров материала 3697
Распечатать страницу

9 ответов

вот мое лучшее решение: создайте Applescript с помощью:

do shell script "/Applications/Firefox.app/Contents/MacOS/firefox -P default -no-remote & killall Firefox.app"

и сохранить как приложение.

Вы можете поместить любое приложение с любыми аргументами в первой части. Часть после & должен убить все, что вы назвали свой скрипт + .приложение. Вы увидите приложение, скрипт Флэш в доке, но потом исчезают.

Примечание: сценарий не будет работать должным образом при запуске из редактора сценариев, только при запуске из созданный сценарий приложения.

15
отвечен MJeffryes 2023-04-02 20:27

начиная с OS X 10.6.2, команда open может передавать аргументы приложению, которое она открывает, с помощью флага --args. AppleScript для использования выглядит так:

do shell script "open -a /Applications/Firefox.app --args -P default -no-remote"

Это должно дать вам все поведение, которое вы хотите.

21
отвечен Bob 2023-04-02 22:44

открыть Automator создать приложение в одном Выполнить Скрипт действие:

 /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"

оба работают нормально и не держат ни терминал, ни приложение-скрипт бегает больше секунды или около того. С помощью Automator можно даже создать сервис если вы выбираете так.

11
отвечен Daniel Beck 2023-04-03 01:01

Это старая дискуссия, но все еще появляется в поисках Google, поэтому я подумал, что добавлю пару ¢.

Это, наверное, лучше использовать "идентификатор пакета", а не абсолютный путь к исполняемому файлу:

open -b com.google.Chrome --args --profile-directory="Profile 1"

или в сценарии Apple:

do shell script "open -b com.google.Chrome --args --profile-directory='Profile 1'"

что я еще не понял, так это как открыть новый экземпляр/окно с другим профилем, как только первый уже открыт. (Если я запускаю AppleScript выше, то другой с " профилем 2", тогда Chrome по-прежнему будет просто открывать другое окно как "профиль 1"). : (

7
отвечен user1722483 2023-04-03 03:18

нет необходимости (как предлагали некоторые другие ответы) использовать killall (или аналогичный), чтобы убить родительский процесс приложения AppleScript ("апплет") в этом сценарии. Он может даже иметь неблагоприятные побочные эффекты если имя / картина, Котор дали к killall матчи больше, чем просто процесс родителей апплета (например, другие, параллельно AppleScript приложений (при использовании "апплет" как шаблон)).

что-то вроде kill $PPID может быть более разумным, но мы не можем предположить, что апплет приложения AppleScript всегда является непосредственным родителем оболочки, запущенной сделать скрипт. К счастью, есть вполне разумный способ сделать то, что вам нужно.

Per TN2065 (в разделе " я хочу запустить фоновый серверный процесс; как заставить скрипт оболочки не ждать завершения команды?"), правильный метод-перенаправить stdout и stderr и заставить оболочку запустить программу в фон.

использовать Редактор Скриптов, чтобы сохранить следующую программу в качестве приложения AppleScript:

do shell script ¬
    "/Applications/Firefox.app/Contents/MacOS/firefox-bin \
        -P default -no-remote \
        >/dev/null 2>&1 &"

(функциональные разрывы строк добавлены, чтобы держать его "узкий"; удалить ¬ и \ и поставить все это на одной длинной линии, если хотите)

Он будет работать достаточно долго, чтобы начать Firefox и выйдет чисто пока Firefox продолжает работать.

перенаправление требуется, потому что не только сделать скрипт дождитесь выхода его непосредственного потомка (оболочки), но он также ждет (всех экземпляров) записываемых концов каналов, которые он создает, чтобы stdout и stderr оболочки были закрыты. Оболочки stdout и stderr (сделать скрипт ' ы трубы) наследуются программ, которые он работает без перенаправления (даже те, которые работают в фоновом режиме с &); перенаправление гарантирует, что оболочка является последней для хранения записываемых концов трубная продукция. Таким образом,сделать скрипт вернется сразу после выхода оболочки, позволяя приложению AppleScript само выйти (так как сделать скрипт - последнее выражение в программе AppleScript).

другие ответы, которые используют открыть внутри сделать скрипт работы за открыть (фактически LaunchServices) выполняет эквивалентную работу по backgrounding результирующей программы и отправке ее stdout и stderr в другом месте.

7
отвечен Chris Johnsen 2023-04-03 05:35

AppleScript

do shell script "/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --incognito & killall applet"

там две точки.

  1. пробел экранируется обратной косой чертой, которая экранируется обратной косой чертой снова
  2. апплет команду killall может вызвать проблемы, потому что могут быть запущены другие апплеты
  3. Сохранить как program

однако он хорошо работает на 10.6.5

3
отвечен anonymous 2023-04-03 07:52

ниже следует указать аргументы командной строки .само приложение:

щелкните правой кнопкой мыши .App bundle, выберите "Показать содержимое пакета", перейдите к информации.plist, дважды щелкните его, найти ключ Args, редактировать.

У меня сейчас нет машины OS X, поэтому я не могу проверить, можете ли вы также сделать это с псевдонимом (если вы хотите сохранить оригинал .приложение аргумент-бесплатно, и так далее).

2
отвечен Dav 2023-04-03 10:09

почему бы вам не использовать:

#!/bin/sh
open /Applications/Firefox.app

простой, но он работает.

2
отвечен 2023-04-03 12:26

оберните приложение в средство запуска AppleScript.

вот шаги.

  1. создайте AppleScript со следующим содержимым и сохраните его как приложение (в данном примере он называется "Firefox 3 launcher.приложение.)"

    set pathToApp to (POSIX path of (path to me)) & "Firefox 3.app"
    do shell script "open -a \"" & pathToApp & "\" --args -P default -no-remote"
    
  2. добрался до этого приложения в Finder, щелкните его правой кнопкой мыши, показать содержимое пакета.

  3. поместите приложение в корень содержимого пакета. (В данном примере это было бы быть " Firefox 3.app")

    результат: /Applications/Firefox 3 launcher.app / Firefox 3.app

  4. теперь вы можете открыть ваше приложение.

Примечания:

  • автоматические обновления обернутого приложения должны работать в большинстве случаев.
  • должно быть возможно сделать любое перетаскивание на пусковую установку автоматически перенаправленным на обернутое приложение (с немного больше описание.)
  • средство запуска автоматически завершает работу после запуска обернутого приложения.
  • преимущество этого метода заключается в том, что существует несколько рисков открытия обернутого приложения напрямую.
2
отвечен jlgrall 2023-04-03 14:43

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх