Там какой-либо простой способ состоит в том, чтобы добавить параметры командной строки к приложению на 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 &
Вот мое лучшее решение: Создайте Applescript с:
do shell script "/Applications/Firefox.app/Contents/MacOS/firefox -P default -no-remote & killall Firefox.app"
И сохраните его как приложение.
Можно поместить любое приложение с любым args в первой части. Часть после &
потребности уничтожить независимо от того, что Вы назвали свой сценарий + .app. Вы будете видеть, что приложение сценария вспыхивает в прикреплении, но оно затем исчезнет.
Примечание: Сценарий не будет работать правильно, когда выполнено из Редактора сценариев, только, когда выполнено из приложения сценария, которое Вы создали.
Следующее должно позволить Вам указать параметры командной строки для самого .app:
Щелкните правой кнопкой по пакету .app, выберите "Выставочное Содержание Пакета", перейдите к Info.plist, дважды щелкают по нему, находят ключ Args, редактирование.
У меня нет машины OS X удобным правом в данный момент, таким образом, я не могу проверить, могли ли Вы также сделать это к псевдониму (если Вы хотели сохранить оригинал .app без аргументов, и так далее).
Почему не делают Вы используете:
#!/bin/sh
open /Applications/Firefox.app
Простой, но это работает.
Начиная в OS X 10.6.2, открытая команда может передать аргументы приложению, которое это открывает посредством - args флаг. AppleScript для использования это похоже на это:
do shell script "open -a /Applications/Firefox.app --args -P default -no-remote"
Это должно дать Вам все поведение, которое Вы хотите.
Откройте 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, можно даже создать Сервис, если Вы выбираете так.
AppleScript
do shell script "/Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome --incognito & killall applet"
Две точки там.
Однако это работает хорошо над 10.6.5
Это не необходимо (как некоторые другие ответы предположили) использовать 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 в другом месте.
Перенесите свое приложение в средстве запуска AppleScript.
Вот шаги.
Создайте 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"
Добрался до того приложения в Средстве поиска, щелкните правой кнопкой по нему, покажите содержание пакета.
Поместите свое приложение в корень содержания пакета. (В этом примере это был бы "Firefox 3.app"),
Результат:/Applications/Firefox 3 launcher.app/Firefox 3.app
Можно теперь открыть средство запуска приложения.
Примечания: