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

Там какой-либо простой способ состоит в том, чтобы добавить параметры командной строки к приложению на Mac? Например, чтобы запустить Opera в режиме киоска или использовать другой профиль в Firefox, я могу ввести

$ /Applications/Opera.app/Contents/MacOS/Opera -kioskmode
$ /Applications/Firefox.app/Contents/MacOS/firefox -P profilename -no-remote

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

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

#!/bin/sh
/Applications/Firefox.app/Contents/MacOS/firefox -P default -no-remote &
61
задан 01.08.2009, 14:39

8 ответов

Вот мое лучшее решение: Создайте Applescript с:

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

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

Можно поместить любое приложение с любым args в первой части. Часть после & потребности уничтожить независимо от того, что Вы назвали свой сценарий + .app. Вы будете видеть, что приложение сценария вспыхивает в прикреплении, но оно затем исчезнет.

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

17
ответ дан 07.12.2019, 08:18

Следующее должно позволить Вам указать параметры командной строки для самого .app:

Щелкните правой кнопкой по пакету .app, выберите "Выставочное Содержание Пакета", перейдите к Info.plist, дважды щелкают по нему, находят ключ Args, редактирование.

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

3
ответ дан 07.12.2019, 08:18

Почему не делают Вы используете:

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

Простой, но это работает.

1
ответ дан 07.12.2019, 08:18

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

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

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

28
ответ дан 07.12.2019, 08:18

Откройте Automator и создайте Приложение с единственным действием Сценария оболочки Выполнения:

 /Applications/Firefox.app/Contents/MacOS/firefox-bin -here-some-args &

Это приложение запустит Firefox и выйдет немедленно, оставляя только выполнение Firefox.


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

do shell script "open -a '/Users/danielbeck/Applications/Firefox.app' --args -ProfileManager"

Оба хорошо работают и не поддерживают в рабочем состоянии или Терминал или приложение сценария для больше, чем секунда или около этого. Используя Automator, можно даже создать Сервис, если Вы выбираете так.

11
ответ дан 07.12.2019, 08:18

AppleScript

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

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

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

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

4
ответ дан 07.12.2019, 08:18

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

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

На 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) делает эквивалентную работу фоновой обработки получающаяся программа и отправка ее stdout и stderr в другом месте.

8
ответ дан 07.12.2019, 08:18

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

Вот шаги.

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

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

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

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

  4. Можно теперь открыть средство запуска приложения.

Примечания:

  • Автоматические обновления перенесенного приложения должны работать в большинстве случаев.
  • Должно быть возможно сделать любое перетаскивание к средству запуска автоматически перенаправленным к перенесенному приложению (с немного большим количеством сценариев).
  • Средство запуска автоматически выходит после того, как перенесенное приложение запущено.
  • Преимущество этого метода состоит в том, что существует немного рисков открытия перенесенного приложения непосредственно.
2
ответ дан 07.12.2019, 08:18

Теги

Похожие вопросы