Как сделать этот файл .sh исполняемым с помощью двойного щелчка?

165

Во-первых, я использую Mac.

Далее мне нужно выполнить этот «file.sh», мы его назовем. Каждый раз, когда мне нужно выполнить его, я должен открыть терминал и набрать:

cd /Users/Jacob/Documents/folderWithFileInIt
bash file.sh

Это нормально, но я чувствую, что было бы намного быстрее, если бы я запускал файл двойным щелчком, не так ли?

Итак, мой вопрос, как мне сделать этот файл исполняемым с помощью двойного щелчка?

Мои идеи были либо:

а) набрать в терминале что-то вроде chmod и изменить права доступа?

б) создать файл, поместить в него код, который я написал выше ^, а затем сделать этот файл исполняемым?

в) сделать автоматизацию, чтобы как-то это сделать?

Какой путь лучше или есть еще лучший способ? Также, пожалуйста, объясните как можно больше, я новичок в Терминале. Спасибо.

Иаков
источник
1
Если вам нужен красивый, легко нажимаемый скрипт, то да, Automator - это правильный инструмент. Вы, кажется, знаете это из своего вопроса, так какой у вас вопрос?
Роб Нейпир
Тот же вопрос, но у меня есть jdk dmg, какая-то папка приложения для создания иконок, какая-то Jar ... но мне не удалось запустить / создать с помощью автоматизатора или
.command

Ответы:

350

По умолчанию *.shфайлы открываются в текстовом редакторе (Xcode или TextEdit). Чтобы создать скрипт , который будет выполняться в терминале , когда вы открываете его, назовите его с «командой» расширением, например, file.command. По умолчанию они отправляются в терминал, который запустит файл в виде сценария оболочки.

Вам также необходимо убедиться, что файл является исполняемым, например:

chmod +x file.command

Без этого Терминал откажется выполнить его.

Обратите внимание, что сценарий не обязательно должен начинаться с #!префикса в этом конкретном сценарии, потому что Terminal специально организует его выполнение с вашей оболочкой по умолчанию. (Конечно, вы можете добавить #!строку, если вы хотите настроить, какая оболочка используется, или если вы хотите убедиться, что вы можете выполнить ее из командной строки при использовании другой оболочки.)

Также обратите внимание, что Терминал выполняет сценарий оболочки без изменения рабочего каталога. Вам нужно будет начать свой скрипт с cdкоманды, если вам действительно нужно запустить ее с определенным рабочим каталогом.

Крис Пейдж
источник
1
Спасибо за более полезный ответ.
Джейкоб
46
Также вы можете использовать cd "`dirname "$0"`"для установки текущего рабочего каталога каталог, в котором находится сценарий оболочки.
gearsdigital
3
По эстетическим соображениям вы должны также щелкнуть правой кнопкой мыши на файле .command и открыть информацию. Там у вас есть возможность скрыть суффикс (под именем и суффиксом).
Биджан
Я использую этот метод для запуска приложений с помощью open -n ...команды. Это работает, но каждый раз, когда открывается окно терминала, и отображается сообщение «[Процесс завершен]». Можно ли как-то предотвратить появление окна терминала?
Ник
1
@Nik Нет смысла запускать его в терминале, если вы не хотите, чтобы он отображался в окне терминала. Вместо этого сделайте это приложением, чей исполняемый файл представляет собой сценарий shebang. Или создайте апплет AppleScript или Automator, который запускает скрипт. Вы также можете использовать настройки терминала, чтобы изменить профиль и закрыть окно при выходе из процесса, но это не лучшее решение, если вы просто хотите запустить скрипт оболочки без взаимодействия с пользователем.
Крис Пейдж
31

Удалите расширение полностью, а затем дважды щелкните его. Большинство сценариев системной оболочки похожи на это. Пока у него есть Шебанг, это будет работать.

NobleUplift
источник
1
Кстати, "shebang" в основном это строка перед любыми строками: #! / Bin / sh, но она может быть другой, прочитайте предоставленную ссылку для других случаев.
Лукас Лиезис
Разве этот подход не должен делать chmod?
Атул
11

Вы можете просто сказать Finder, чтобы открыть .shфайл в терминале:

  1. Выберите файл
  2. Получить информацию (CMD-I) о нем
  3. В разделе «Открыть с помощью» выберите «Другое…» во всплывающем меню.
  4. Выберите терминал в качестве приложения

Это будет иметь тот же эффект, что и переименование, за .commandисключением того, что ... вам не нужно переименовывать его :)

Маркус Амальтея Магнусон
источник
8
  1. Запустить терминал
  2. Тип -> nano fileName
  3. Вставьте пакетный файл и сохраните его
  4. Введите -> chmod + x fileName
  5. Это создаст исполняемый файл, теперь вы можете дважды щелкнуть по нему мышью.

Имя файла должно быть в двойных кавычках. Так как я использую mac-> В моем случае содержимое пакетного файла является

cd / Users / yourName / Documents / SeleniumServer

java -jar selenium-server-standalone-3.3.1.jar -role hub

Это будет работать наверняка

Manish
источник
0

вы можете изменить исполняемый файл, используя chmodэто

chmod 755 file.sh

и использовать эту команду для выполнения

./file.sh
Ночной кодер
источник
Добро пожаловать на ТАК! Ваш ответ ничего не добавляет к уже принятому ответу. Пожалуйста, объясните, почему это отличается от других ответов, которые уже существуют.
ГабриэльОширо