Створіть файл, який при відкритті записує рядок у Terminal


1

Чи є спосіб створити файл, який при натисканні відкриває термінал і набирає та виконує вказаний рядок? (Наприклад: say hello world)

Відповіді:


2

Простий, але повністю помилковий підхід - це просто написати сценарій оболонки. Збережіть це у файлі під назвою mysay.sh:

#!/bin/sh
say hello world
say number five is alive

Поки у вас не встановлено XCode, який повинен відкриватися в Terminal, коли ви двічі клацніть на ньому.

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

tell application "Terminal"
  set currentTab to do script "/usr/bin/say hello world"
  do script "/usr/bin/say number five is alive" in currentTab
end tell
delay 5
tell application "Terminal" to quit

Збережіть це як програму з редактора AppleScript, і ви можете двічі клацнути по ній, і ваш Mac буде спілкуватися з вами. Ви можете зачекати і закрити сеанс терміналу після цього, за допомогою трохи більше AppleScript, якщо хочете.


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

З затримкою.
Ян Ч.

Я дотримувався другого методу і зберігав його на своєму робочому столі, і він працює бездоганно. Однак якщо я спробую надіслати його електронною поштою, а потім відкрити завантажений файл, він видає повідомлення про помилку, що я не можу його відкрити, оскільки "класичне середовище більше не підтримується". Будь-яка ідея, як це вирішити?
бравокілоечо

Це дивно. Яка програма електронної пошти? Сканер вірусів? Здається, що щось перетворило на вас пакет додатків.
Ян Ч.

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

3

Те, що ви намагаєтеся зробити, це написати "скрипт оболонки" (на випадок, якщо вам доведеться згодом його гуглювати).

У першому рядку скрипту оболонки потрібно вказати, який інтерпретатор використовувати. У вашому випадку використовуйте shдля звичайної оболонки Борна. Ви пишете це з так званим "шебангом" так:

#!/bin/sh

після цього написати все команди , які ви хочете запустити, в вашому випадку, say hello world. Інтерпретатор оболонки прочитає це так само, як якщо б ви ввели його в терміналі.

У вашому випадку ваш остаточний файл повинен бути:

#!/bin/sh
say hello world

Якщо ви пишете це в TextEdit.app, переконайтеся, що ви економите в простому текстовому режимі (який перемикається на Cmd+ Shift+ T). Ви можете зберегти за допомогою розширення .commandабо .sh.

Якщо ви хочете запустити його подвійним клацанням, рекомендую .commandрозширення.

І це все!

Можлива помилка: якщо під час запуску ви отримуєте повідомлення про помилку:

Файл "[ім'я файлу]" не вдалося виконати, оскільки у вас немає відповідних прав доступу.

вам потрібно дати дозвіл на виконання. Для цього виконайте:

chmod u+x path/to/my/file

Якщо ви не знаєте, що саме файл-шлях, просто введіть:

chmod u+x

введіть пробіл і перетягніть файл у вікно.

Якщо вам цікаво, u+xзначить, дайте користувачеві (власникові) права на виконання.


Це все справді корисно, спасибі велике. Чи є спосіб включити права на виконання в самому скрипті оболонки (так що, якщо я chmod u+x
надішлю

@negatron ха-ха, ні, це куряче-яєчний стиль, для запуску сценарію потрібні права виконання; і якщо ви хочете, щоб сценарій дав собі права на виконання, ви повинні запустити його. Крім того, уявіть, як легко було б заразити машини, якщо вам не потрібно було надавати права на виконання; є причина, що вони існують в першу чергу.
Хоукен

Ти маєш рацію! Сором мені, хоча!
bravokiloecho

1

Ви також можете зробити це за допомогою AppleScript, як згадувалося вище, від Ian C. Однак, одну команду можна виконати у меншій кількості рядків та з a delay. Ось AppleScript, який запустить команду, потім зачекайте 5 секунд, а потім закрийте термінал.

tell application "Terminal" to do script "say hello world"
delay 5
tell application "Terminal" to do script "logout"
tell application "Terminal" to quit

Просто альтернативний метод, порівняно зі способом @Ian C. Ви також можете взяти .sh файл Ian і перейменувати його .command, якщо у вас є XCode, який відкриє його в Terminal, і зробіть те саме, що і AppleScript, тільки не зволікаючи. Сподіваюся, це допомагає.


Дякую дійсно акуратно. Дякую. Чи є якийсь спосіб, щоб команда quit виконувалась після того, як виступ закінчився, а не спирався лише на таймер?
бравокілоечо

Так, просто видаліть рядок "затримка 5".
ruddfawcett

Це може спричинити по-справжньому небажані наслідки, оскільки це вб’є всю програму терміналу
Хоукен

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