Як запустити файл .sh або .command у терміналі


87

Я завжди хотів мати можливість запускати сценарій, завантажений в Інтернеті безпосередньо з Finder, але лише двічі клацнути файл не працює.

Відповіді:


103

Відкрийте термінал, введіть sh /path/to/fileі натисніть клавішу Enter.

Швидше ввести shта пробіл, а потім перетягнути файл у вікно та відпустити піктограму в будь-якому місці вікна.


3
Як ви думаєте, що станеться, якщо сценарій оболонки записаний у синтаксисі іншого оболонки, наприклад, tcsh, zsh або ksh? Суфікс shпозначає скрипт оболонки, а не "запуск сценарію в цій оболонці".
fd0

3
@ fd0 Лінія shebang подбає про це.
користувач14492

4
@ user14492- Коли ви викликаєте скрипт оболонки, оскільки shell shell_scriptлінія shebang ігнорується. Оболонка читає перший рядок як коментар.
fd0

@ fd0, я не розумію. Чим sh /path/to/fileсемантично відрізняється від альтернативної /path/to/file.sh?
Pacerier

2
@ Pacerier - У першій формі користувач, що викликає, повинен мати можливість читати файл і вибирати, який інтерпретатор буде читати файл. У другій формі дозволи дозволу на файл повинні бути прочитані та виконані для користувача, що викликає, і інтерпретатор визначається хеш-багом у першому рядку сценарію. В обох випадках ядро ​​не інтерпретує суфікс у файлі.
fd0

12

Крім того, ви могли також зробити

cd /directory/with/executable
chmod +x executable     # only required if your file is not already executable
./executable

який також запустить виконуваний файл із вказаною оболонкою (якщо вказано в шебангу) #!/bin/(shell)


1
У запитанні написано "запустити сценарій, який я завантажив в Інтернеті". Для файлів, завантажених з Інтернету, зазвичай встановлено дозволи 644.
nohillside

@patrix Я думаю, що це не лише Інтернет, але кожен файл, який скопіюється з іншої файлової системи на вашу через маску за замовчуванням у вашому обліковому записі.
rwenz3l

8
chmod u+x myfile.sh
cp myfile.sh /usr/local/bin

відредагуйте ~/.bash_profileта додайте наступний рядок:

alias myfile=./myfile.sh

виконати такий командний рядок:

source ~/.bash_profile

тоді ви зможете запустити файл як програму

$ myfile


в Ubuntu будь-який скрипт на вашому шляху може виконуватися до тих пір, як у вас є #~/bin/sh, тоді як у OSXсценарії має бути .shрозширення та а aliasдля кожного з них. : -O
Фабріціо Бертоліо

6

Для запуску файлів сценарію виконайте наступні дії:

  1. Клацніть правою кнопкою миші на файл .sh.

  2. Наведіть курсор на Open With .

  3. Виберіть Інші ... .

  4. Ви повинні знаходитись у папці Програми . Відкрийте папку Utilities і виберіть Terminal.app.

  5. Якщо ви не можете вибрати Terminal.app, змініть увімкнені програми з Рекомендовані програми на Усі програми . Це внизу вікна.

  6. Якщо ви хочете відкрити кожен .shфайл за допомогою Terminal.app, поставте галочку Завжди відкривати .

  7. Натисніть кнопку Відкрити в нижньому правому куті вікна.


3

Причиною не працює після завантаження є те, що дозволи файлів не дозволяють. Щоб увімкнути дозволи на виконання, відкрийте Terminal та введіть chmod 755 /path/to/script. Замість того, щоб вводити повний шлях, ви можете перетягнути скрипт у вікно терміналу з Finder. Потім для виконання просто введіть /path/to/script. Знову ж таки, ви можете перетягнути файл на вікно терміналу. Цей синтаксис повинен виконати сценарій, використовуючи правильну оболонку, як визначено в першому рядку сценарію.


Мій файл .sh відкриється в текстовому редакторі, з яким я створив файл. Як я можу замість цього відкрити його в терміналі? Я встановив правильні дозволи.
барт

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