Выполнение сценариев оболочки из OS X Dock?


160

Как настроить сценарий оболочки для запуска из док-станции Mac OSX? Кажется, что просто создание ярлыка откроет файл в моем редакторе. Есть ли флаг, который мне нужно установить где-нибудь, чтобы он запустился вместо открытия для редактирования?


2
+1 +1 исключительно для аватара, хотя тема мне тоже нравится.
Мэтт Баннер

Возможно, вы захотите рассмотреть возможность перехода на второй ответ @Wilco. Я думаю, что это лучший ответ.
Серый

Ответы:


190

Вы можете создать рабочий процесс Automator за один шаг - «Run Shell Script»

Затем File > Save Asи измените формат файла на «Приложение». Когда вы откроете приложение, оно выполнит шаг Shell Script, выполнив команду и выйдя из нее после ее завершения.

Преимущество в том, что это действительно просто сделать, и вы можете очень легко получить пользовательский ввод (скажем, выбрав кучу файлов), а затем передать его на вход сценария оболочки (либо в stdin, либо в качестве аргументов).

(Automator находится в вашей /Applicationsпапке!)

Пример рабочего процесса


6
@dbr, толкатель кнопки GUI! :) Шучу, это хорошее предложение!
будет

Да, это было отличное предложение :) Я даже написал действия Automator для некоторых своих приложений, и я все еще забываю об этом в такие моменты :)
Джейсон Коко

Я не могу заставить это работать с nohup, а-ля "nohup / usr / bin / myscript &; disown -a && exit 0". Мне нужно приложение / рабочий процесс для запуска скрипта и немедленного выхода. Любые идеи? :-)
2010 года

3
@martineau Если вы откроете приложение, сделав open -a SomeAppThing.app --args --etc=2это, следует сосредоточиться. В качестве альтернативы вы можете сфокусировать его, используя Applescript (например osascript -e 'tell application "Google Chrome" to activate')
dbr

1
Примечание: если ваш скрипт запускает приложение с графическим интерфейсом, которое некоторое время будет оставаться открытым, на панели задач будет отображаться постоянно вращающийся значок шестеренки, пока приложение не закроется. Один из обходных путей - добавить `&> / dev / null &` к стартовой строке скрипта, чтобы Automator не ждал.
ewall

50

Если вам не нужно окно терминала, вы можете сделать любой исполняемый файл приложением, просто создав сценарий оболочки Exampleи переместив его в имя файла Example.app/Contents/MacOS/Example. Вы можете поместить это новое приложение в вашу док-станцию, как и любое другое, и запустить его одним щелчком мыши.

ПРИМЕЧАНИЕ: название приложения должно точно соответствовать имени скрипта. Таким образом, каталог верхнего уровня должен быть Example.appи скрипт в Contents/MacOSподкаталоге должен быть назван Example, и скрипт должен быть исполняемым.

Если вам нужно отобразить окно терминала, у меня нет простого решения. Возможно, вы могли бы что-то сделать с Applescript, но это не очень чисто.


1
Вы случайно не знаете, существует ли простой способ передачи файлов в качестве аргументов скрипту оболочки? Для файлов, открытых с помощью «Открыть с помощью ...».
Fuzzy76

9
Для тех, кто пытается это сделать - имя приложения должно точно соответствовать имени скрипта. Так должно быть example.sh.app, а не только example.app. Вы получите предупреждение о поврежденном приложении, если они не совпадают
Kip

1
Чтобы уточнить - я нуб OSX - вы имеете в виду просто создать структуру папок, подобную той, что показана в вашем примере, с файлом сценария, помещенным в него, как показано?
Мартино

2
@martineau Да, это правильно. Если вы создадите папку, имя которой оканчивается .appэтой структурой, и она будет считаться исполняемым приложением. Если вы хотите просмотреть содержимое этой папки в Finder, вам нужно щелкнуть по ней правой кнопкой мыши и выбрать «просмотреть содержимое пакета» (потому что двойной щелчок по нему запустит приложение). В Терминале это будет просто папка. (Я не уверен, что Finder позволит вам переименовать папку в .app самостоятельно; возможно, вам придется выполнить переименование в терминале.)
Джереми Бэнкс

1
Я просто попытался сделать это и получил сообщение об ошибке в El Capitan (10.11): «Вы не можете открыть ...., поскольку приложения PowerPC больше не поддерживаются». : D Это довольно интересно!
AllenH

26

На OSX Mavericks:

  1. Создайте свой сценарий оболочки.
  2. Сделайте ваш сценарий оболочки исполняемым:

    chmod +x your-shell-script.sh
  3. Переименуйте ваш скрипт, чтобы иметь .appсуффикс:

    mv your-shell-script.sh your-shell-script.app
  4. Перетащите скрипт в док OSX.
  5. Переименуйте ваш скрипт обратно в .shсуффикс:

    mv your-shell-script.app your-shell-script.sh
  6. Щелкните правой кнопкой мыши файл в Finder и выберите параметр «Получить информацию».
  7. В нижней части окна установите сценарий оболочки, который будет открываться с помощью терминала.

Теперь, когда вы нажимаете на скрипт в доке, появится окно терминала и запустите ваш скрипт.

Бонус: чтобы заставить терминал закрыться после завершения сценария, добавьте exit 0в конец и измените настройки терминала, чтобы «закрыть оболочку, если она завершена чисто», как сказано в этом SO-ответе .


Хорошо, это сработало для меня, любой шанс, случайно, икона, мне интересно. К вашему сведению: ТАКЖЕ, шаг 7 относится к файлу, а не к пункту меню ...
Майк Q

кстати приятно! просто все .sh с открытым терминалом.
iHTCboy

@ stiemannkj1, это показывает значок, когда приложение работает? Есть ли способ это скрыть?
Pacerier

@Pacerier, извините, я больше не на OSX (переключился на Linux :)). Возможно, вы захотите попробовать ответ Джереми Банка . У меня нет других идей, и, поскольку у меня нет OSX, я не могу ни тестировать, ни связываться с чем-либо, чтобы попытаться показать / скрыть иконку ..
stiemannkj1

17

Я знаю, что это старый, но в случае, если это полезно для других:

Если вам нужно запустить скрипт и хотите, чтобы терминал всплывал, чтобы вы могли видеть результаты, которые вы можете сделать, как сказал Abyss Knight, и измените расширение на .command. Если вы дважды щелкните по нему, откроется окно терминала и запустите.

Мне, однако, нужно было это запустить из Automator или AppleScript. Таким образом, чтобы открыть новый терминал, я запустил команду «запустить сценарий оболочки» «open myShellScript.command», и она открылась в новом терминале.


замечательно, спасибо! Теперь всем нужно сделать идеальное решение - это закрыть окно терминала после завершения скрипта.
Питер М

1
хорошо, если у вас есть закрытое окно при выходе, выбранное в настройках терминала, вы можете добавить команду выхода в ваш скрипт, и у вас будет то, что вы хотите.
Джейсон Толструп

7

Пока ваш скрипт исполняемый и не имеет никакого расширения, вы можете перетаскивать его как есть на правую сторону (сторона документа) Dock, и он будет запускаться в окне терминала при нажатии вместо открытия редактора.

Если вы хотите иметь расширение (например, foo.sh), вы можете перейти к окну информации о файле в Finder и изменить приложение по умолчанию для этого конкретного сценария из того, что есть (TextEdit, TextMate, независимо от того, какое значение по умолчанию установлено на вашем компьютере для .sh файлы) в Терминал. Затем он будет просто выполняться вместо открытия в текстовом редакторе. Опять же, вам придется перетащить его на правую сторону дока.


1
ПРИМЕЧАНИЕ : это работает как чемпион в OS X 10.10 Yosemite. Я не могу комментировать 10,9
Брайан Эш

1
Работает на 10.11. Спасибо!
Яссин Имуначен

Работает и на 10.12! Возможно, мой комментарий о 10.9 был неверным, но я заметил, что вам нужно убедиться, что вы перетаскиваете его в часть дока под разделителем. У меня нет возможности повторно протестировать 10.9, к сожалению.
stiemannkj1

Не нужно добавлять его в док. Его можно запустить с рабочего стола. Но не может быть никакого расширения. Сделайте его исполняемым, и вы можете просто дважды щелкнуть. Это самый простой вариант, который я видел.
Богатая Аподака

5

Я думаю, что эта тема может быть полезна: http://forums.macosxhints.com/archive/index.php/t-70973.html

Перефразируя, вы можете переименовать его с расширением .command или создать AppleScript для запуска оболочки.


По крайней мере, на Snow Leopard добавление расширения .command к скрипту заставляет его работать в терминале, если вы дважды щелкнете по нему, но по какой-то причине вы все равно не можете перетащить его в док. Предложения дбр и Джереми оба сработали для меня, хотя.
Джо Лисс

5

Как уже упоминал Джо, создание сценария оболочки, а затем создание сценария яблочного сценария для вызова сценария оболочки позволит это сделать, и это очень удобно.

Shell Script

  1. Создайте свой сценарий оболочки в вашем любимом текстовом редакторе, например:

    mono "/Volumes/Media/~Users/me/Software/keepass/keepass.exe"

    (запускается исполняемый файл w32 с использованием моно-фреймворка)

  2. Сохраните скрипт оболочки, для моего примера «StartKeepass.sh»

Apple Script

  1. Откройте редактор AppleScript и вызовите скрипт оболочки

    do shell script "sh /Volumes/Media/~Users/me/Software/StartKeepass.sh" user name "<enter username here>" password "<Enter password here>" with administrator privileges

    • do shell script - командаScript для вызова внешних команд оболочки
    • "sh ...." - это ваш сценарий оболочки (полный путь), созданный на первом этапе (вы также можете запускать прямые команды, я мог бы пропустить сценарий оболочки и просто запустить мою моно команду здесь)
    • user name - объявляет appleScript, что вы хотите запустить команду от имени конкретного пользователя
    • "<enter username here> - заменить своим именем пользователя (с сохранением кавычек) от "Джош"
    • password - объявляет паролем свой пароль
    • "<enter password here>" - заменить своим паролем (с сохранением кавычек) ex "mypass"
    • with administrative privileges - заявляет, что вы хотите работать от имени администратора

Создайте свой .APP

  1. сохраните ваш яблочный скрипт как filename.scpt, в моем случае RunKeepass.scpt

  2. сохраните как ... ваш appleScript и измените формат файла на приложение, в результате чего в моем случае будет RunKeepass.app

  3. Скопируйте файл приложения в папку приложений


5

В редакторе скриптов:

do shell script "/full/path/to/your/script -with 'all desired args'"

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

Пока все, что вы хотите сделать, это получить эффект от сценария, это будет работать нормально. Вы не увидите STDOUT или STDERR.


2
Я бы предложил: «Сохранить как приложение BUNDLE». Пакеты запускаются намного быстрее, чем приложения.
e.James

-3

Кто-то написал ...

Я просто установил все файлы, которые заканчиваются на ".sh", чтобы открывать с помощью терминала. Он отлично работает, и вам не нужно менять имя каждого сценария оболочки, который вы хотите запустить.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.