Виконання скриптів оболонки з док-станції OS X?


160

Як налаштувати сценарій оболонки для виконання з док-станції Mac OSX? Здається, що просто створення ярлика відкриє файл у моєму редакторі. Чи потрібний десь встановити прапор, щоб сказати йому запускати замість того, щоб відкривати його для редагування?


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

Можливо, ви захочете розглянути прийняті відповіді на перемикач на другий @Wilco. Я думаю, що це краща відповідь.
Сірий

Відповіді:


190

Ви можете створити робочий процес Автоматизатора за один крок - "Запустити сценарій оболонки"

Потім File > Save Asі змініть Формат файлу на "Застосування". Коли ви відкриєте програму, вона виконає крок Shell Script, виконуючи команду, та завершивши її виконання після її завершення.

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

(Автоматизатор у вашій /Applicationsпапці!)

Приклад робочого процесу


6
@dbr, кнопковий штовхач GUI! :) Просто жартую, це гарна пропозиція!
Вілла, що

Так, це була відмінна пропозиція :) Я навіть писав дії Автоматизатора для деяких моїх додатків, і я все ще забуваю про це в такі часи :)
Джейсон Коко

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

3
@martineau Якщо ви відкриєте програму, зробіть open -a SomeAppThing.app --args --etc=2це, слід зосередитись. Як альтернативи ви можете сфокусувати його з допомогою AppleScript (наприклад osascript -e 'tell application "Google Chrome" to activate')
DBR

1
Примітка. Якщо ваш сценарій запускає додаток GUI, який залишатиметься відкритим на деякий час, на панелі завдань відображатиметься значок шестерні, що постійно обертається, поки додаток не закриється. Однією з проблем є додавання `&> / 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. Ви отримаєте попередження про пошкоджений додаток, якщо вони не відповідають
Кіп

1
Для уточнення - я OSX noob - ви маєте на увазі просто створити структуру папок, як та, показана у вашому прикладі, з файлом сценарію, розміщеним у ній, як показано?
мартіно

2
@martineau Так, це правильно. Якщо ви створите папку, ім'я якої закінчується в .appцій структурі, вона буде розглядатися як виконуваний додаток. Якщо ви хочете переглянути вміст цієї папки у Finder, вам потрібно буде клацнути правою кнопкою миші та вибрати "переглянути вміст пакета" (оскільки подвійне клацання на ньому запустить додаток). У Терміналі він просто виявиться папкою. (Я не впевнений, чи Finder дозволить вам перейменувати папку в .app самостійно; можливо, вам доведеться зробити перейменування в Терміналі.)
Jeremy Banks

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його до кінця та змініть налаштування терміналу, щоб "закрити оболонку, якщо вона вийшла чисто", як це робиться в цій відповіді "ТАК" .


Приємно, це спрацювало для мене, будь-який спосіб отримати шанс на ікону, яку я дивую. FYI: Також крок 7 посилається на файл, а не на пункт меню ...
Майк Q

дорога приємна! просто всі .sh з відкритим терміналом.
iHTCboy

@ stiemannkj1, Чи відображається це значок під час роботи програми? Чи є все-таки це заховати?
Pacerier

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

17

Я знаю, що це старе, але якщо це корисно для інших:

Якщо вам потрібно запустити сценарій і хочете, щоб термінал з’явився, щоб ви могли побачити результати, які ви можете зробити, як сказав Abyss Knight, і змінити розширення на .command. Якщо ви двічі клацніть на ньому, воно відкриє вікно терміналу і запуститься.

Однак мені це знадобилося для запуску з автоматизатора чи appleScript. Отже, щоб отримати це для відкриття нового терміналу, команда, яку я запустила з "run shell script", була "open myShellScript.command" і відкрилася в новому терміналі.


чудово, дякую! Тепер усі хочуть зробити це ідеальним рішенням - це спосіб закрити вікно терміналу, коли сценарій завершиться.
Пітер М

1
добре, якщо у налаштуваннях термінала у вас є закрите вікно на вихід, ви можете додати команду вихід до свого сценарію, і ви отримаєте те, що хочете.
Джейсон Толструп

7

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

Якщо ви хочете мати розширення (наприклад, 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 до сценарію змушує його запускатись у терміналі, якщо двічі клацнути по ньому, але чомусь ви все ще не можете перетягнути його в док. Пропозиції dbr та Jeremy обидва працювали на мене.
Жо Лісс

5

Як згадував Джо, створення цього скрипта оболонки, а потім створення сценарію яблучного сценарію для виклику сценарію оболонки, це виконає, і це досить зручно.

Сценарій оболонки

  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 - команда applescript для виклику зовнішніх команд оболонки
    • "sh ...." - це ваш скрипт оболонки (повний шлях), створений на першому кроці (ви також можете запускати прямі команди, я можу опустити скрипт оболонки і просто запустити мою команду тут)
    • user name - оголошує в applescript, що ви хочете виконати команду як конкретний користувач
    • "<enter username here> - замінити своїм іменем користувача (зберігаючи цитати) ex "josh"
    • password - декларує, щоб застосувати ваш пароль
    • "<enter password here>" - замінити своїм паролем (зберігаючи цитати) ex "mypass"
    • with administrative privileges - оголошує, що ви хочете запуститись як адміністратор

Створіть свій .APP

  1. збережіть свій яблучний сценарій як filename.scpt, в моєму випадку RunKeepass.scpt

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

  3. Скопіюйте файл програми в папку додатків


5

У редакторі сценаріїв:

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

Збережіть як пакет програм.

Поки все, що ви хочете зробити, це отримати ефект сценарію, це буде добре працювати. Ви не побачите STDOUT або STDERR.


2
Я б запропонував: "Зберегти як додаток BUNDLE". Пакети запускаються набагато швидше, ніж програми.
e.James

-3

Хтось написав ...

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.