Як запустити скрипт оболонки в OS X, двічі клацнувши?


233

У мене є сценарій оболонки, який має дозвіл на виконання користувача в OS X, але коли я двічі клацнув по ньому, він відкриється в текстовому редакторі. Як змусити його запускатись, двічі клацнувши його?

Відповіді:


266
  • Спочатку в терміналі зробіть сценарій виконуваним, ввівши:

    chmod a+x (yourscriptname)
  • Потім у Finder клацніть правою кнопкою миші файл і виберіть "Відкрити за допомогою", а потім "Інше ...".

  • Тут ви вибираєте програму, в яку ви хочете виконати файл, у цьому випадку це буде Terminal. Щоб мати можливість вибрати термінал, вам потрібно перейти з "Рекомендовані програми" на "Усі програми". (Додаток Terminal.app можна знайти в папці Utilities)

  • Зверніть увагу, що якщо ви не хочете пов’язувати всі файли з цим розширенням для запуску в терміналі, ви не повинні мати прапорець "Завжди відкривати".

  • Після натискання кнопки "ОК" ви зможете виконати сценарій, просто натиснувши його двічі.

дякую, я отримав це, я не знав, що асоціювати з терміналом, я вважав, що потрібно асоціюватися з / bin / sh
c2h2

22
Я не зміг знайти Terminal.app у списку, поки не зрозумів, що мені потрібно шукати в папці "Утиліти". Сподіваємось, це врятує когось деякий час.
Глен Лоуренс

27
У OSX 10.8 і новіших версіях виконуваний скрипт, у імен якого немає ні суфікса, ні суфікса .command, за замовчуванням виконується з Finder, без необхідності вказувати Finder, як його відкрити.
mklement0

1
"Усі програми" - це налаштування, якого мені не вистачало ... напевно, те, що відчував і Черувім. Щодо коментаря Глена: ви можете просто скористатися функцією пошуку вбудованого пошуку у верхньому правому куті вікна; переконайтеся, що ви вводите повне ім’я програми, тобто Terminal.app.
старший старший

3
Не чистий спосіб це зробити. Перейменуйте свій скрипт у .commandрозширення файлу.
Бахсау

227

Ви намагалися використовувати .commandрозширення імені файлу?


3
Це краще. У @Lus відповіді робоча папка не те саме, що ви відкриєте сценарій.
Родріго

6
Чи є спосіб запустити "фонові" завдання без вікна консолі?
lapo

6
Зауважте, що поточний каталог може бути не тим, у якому знаходиться ваш сценарій. Погляньте на це питання, щоб правильно його встановити: stackoverflow.com/questions/59895/…
Павло Алексєєв,

14
Ви все ще повинні мати дозвіл на виконання ( chmod +x), але .commandрозширення вже пов'язане з Terminal. Чудове рішення, дякую
NorTicUs

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

153

Що стосується OSX 10.10 (Yosemite) і оскільки принаймні OS X 10.8 (Mountain Lion) , то поведінка виглядає наступним чином, коли ви відкриваєте (двічі клацніть) виконувані сценарії з Finder :

  • Виконані сценарії [1] з суфіксом NO або суфіксом.command :
    • які виконуються за замовчуванням - не потрібна установка :
      • новий термінал відкриється вікно , в якому сценарій працює.
      • за замовчуванням вікно залишатиметься відкритим після закінчення сценарію, щоб ви могли перевірити вихід (хоча в цей момент оболонка, що запустила сценарій, вийшла, і ви більше не можете з нею взаємодіяти ).
        Однак за допомогою терміналу Preferences... > Profilesви можете автоматично закрити вікно, коли сценарій закінчується.
    • Caveat : робоча папка незмінно є домашньою папкою поточного користувача , а не папкою, в якій знаходиться сценарій.
      • Щоб змінити скрипт оболонки до папки, в якій він знаходиться, помістіть
        • cd -- "$(dirname "$BASH_SOURCE")" одразу після лінії шебанга
        • або, якщо ви повинні залишатися POSIX-сумісними, cd -- "$(dirname "$0")".
        • Для особливих випадків, таких , як знайти слінкован істинний вихідний каталог скрипта, см ця відповідь мій.
    • Якщо сценарій несподівано не виконується :
      • Зробіть його виконаним, запустивши chmod +x <script>в Терміналі; в іншому випадку ви побачите такі симптоми:
      • .command: Finder відображає помилкове повідомлення про помилку, яке дозволяє припустити, що проблему можна усунути File > Get Info, що не відповідає дійсності - використовуйте chmod +xзапропонований вище метод.
      • немає суфікса:
        • з рядком shebang (наприклад, #!/bin/bash): поведінка наче суфікс .sh- див. нижче.
        • з НЕ притон лінії: відкривається в текстовому редакторі з замовчуванням (який TextEdit за замовчуванням).
  • Сценарії із суфіксом.sh , виконуваними чи ні:
    • які відкриті для редагування в TextEdit.appабо, якщо він встановлений, з Xcode.app.
  • Сценарії з суфіксом.scpt або .applescript(навіть якщо вони самі позначені як виконувані, що зазвичай не буває):
    • відкрито для редагування в[Apple]Script Editor
    • Зауважте, що у файлів вихідного коду JXA, схоже, немає чіткого суфікса (поки).
  • Сценарії з більш призначеним для користувача суфіксом (суфікс ще не відомий системою), то чи виконуваним файлом чи ні (насправді, відноситься до будь-якого файлу):
    • підкажіть вам за додатокщоб відкрити їх , коли ви перший відкрити їх , і пам'ятайте , що вибір .

[1] Виконаний означає: сценарій із встановленими бітами дозволу на виконання та користувачем, що викликає виклик - щодо власності на файл - тому потенційно може бути дозволено його виконувати.
Якщо ви використовуєте chmod a+xдля встановлення всіх бітів дозволу (що є типовим), будь-хто може викликати його (припускаючи, що їм також дозволено читати файл на основі дозволів читання дозволів читання та власності на файл).


1
Закрити вікно терміналу можна, коли сценарій закінчується простим, який osascriptви можете включити у .commandфайл, замість того, щоб вручну возитися з профілем.
l'L'l

@ I'L'I: Ви маєте на увазі додавання osascript -e '...'команди до кінця сценарію? Яка конкретна команда, і чи гарантує вона, що права вкладка закрита, навіть коли сценарій не виконується в передній вкладці?
mklement0

5
@ mklement0: Так, я не перевіряв його більше декількох хвилин, але основна ідея полягає в тому, щоб включити в останній рядок сценарію .command : osascript -e 'tell application "Terminal" to close front window' > /dev/null 2>&1 &... Це може працювати не в кожному сценарії, хоча перенаправлення на end є дійсно ключовим - osascript в іншому випадку може бути легко адаптований (наприклад, вікно, можливо, потрібно буде змінити на вкладку, якщо це ваша поведінка терміналу за замовчуванням тощо).
l'L'l

Чи можливо не дозволити закрити вікно / вкладку терміналу після .commandзапуску файлу сценарію, незважаючи на налаштування профілю?
CyberMew

@CyberMew: Якщо ви можете змінити сценарій, додайте команду, яка чекає натискання клавіші в кінці; наприклад, якщо це bashсценарій, додайте read -p 'Press Return to close this window.'як останнє твердження.
mklement0

38

Крім того, ви можете створити звичайний додаток Mac OS X зі свого сценарію за допомогою Platypus


Це дійсно чудовий додаток. Але у мене тут є якась проблема. У мене є сценарій python, який я хочу перетворити у файл .app. Мій сценарій включає рядок, у якому користувач повинен ввести деякий вхід (raw_input ()), коли .app досягне цього рядка коду, він видає помилку EOF (кінець файлу). Що я можу з цим зробити?

1
Це не інтерактивний термінал. Платипус лише представляє вихідний сценарій. Немає двостороннього зв’язку.
svth

4
Або створіть додаток OS X за допомогою Automator за допомогою дії Run Shell Script.
Рангі Кін

15

Найпростіший спосіб - змінити розширення на .commandабо не.

Але це відкриє Термінал, і вам доведеться його закрити. Якщо ви не хочете бачити жодного результату, ви можете використовувати Automator для створення програми Mac, яку можна двічі клацнути, додати до док-станції тощо.

  1. Відкрита Automatorпрограма
  2. Виберіть тип "Застосування"
  3. Введіть "запустити" у полі пошуку "Дії"
  4. Двічі клацніть «Запустити сценарій оболонки»
  5. Клацніть Runкнопку у верхньому правому куті, щоб перевірити її.
  6. File > Save для створення програми.

введіть тут опис зображення


Чудово! Як ми можемо автоматизувати цей робочий процес щодня о 13:00?
iAkshay

9

Не потрібно використовувати сторонні додатки, такі як Platypus.

Просто створіть сценарій Apple із редактором сценаріїв і використовуйте команду do shell script "shell commands"для прямих викликів команд або виконуваних файлів скриптів оболонки, збережіть файл, який можна редагувати, десь захистити, а потім експортуйте його, щоб створити сценарій програми. сценарій програми може бути запущений подвійним клацанням або виділенням у папці бар.


3
Ще краще, використовуйте Automator і використовуйте дії Run Shell Script безпосередньо, а не переживаючи Apple Script.
Рангі Кін

0

Ви також можете встановити параметри за замовчуванням за допомогою розширення файлу за допомогою RCDefaultApp:

http://www.rubicode.com/Software/RCDefaultApp/

потенційно ви можете встановити .sh для відкриття в iTerm / Terminal і т. д., йому потрібно буде виконати права доступу користувача, наприклад

chmod u+x filename.sh

Попередня панель RCDefaultApp


0

chmod 774 filename

Примітка . Файл з назвою "ім'я файлу", що містить скрипт bash, не має розширення

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