Главная
» MAC OS X
»
Как запускать команды терминала из скрипта в macOS
Как запускать команды терминала из скрипта в macOS
Чтобы запускать команды Терминала из скрипта в macOS, поместите их в текстовый скрипт оболочки, сделайте его исполняемым, а затем запустите из Finder или Терминала. Используйте .commandрасширение для открытия скрипта двойным щелчком. Скрипт не обходит средства контроля конфиденциальности macOS и не предоставляет права администратора.
Короткий скрипт оболочки начинается с шебанга, который выбирает zsh.
1. Запишите команды в текстовый файл.
Скрипт оболочки — это текстовый файл, содержащий команды. Он запускается с помощью shebang — первой строки, которая указывает macOS, какая оболочка должна интерпретировать файл. В настоящее время оболочкой по умолчанию для новых окон Терминала является zsh, хотя администратор может установить другую оболочку по умолчанию, как объясняет Apple в своем руководстве по Терминалу . В этом примере явно используется zsh:
#!/bin/zsh
# Print a message when the script runs
echo "Script is running"
Команды следует размещать на отдельных строках после шебанга. Шебанг выбирает интерпретатор, поэтому используйте поддерживаемый им синтаксис; например, скрипт Bash может начинаться с ` #!/bin/bash.`. В руководстве Apple по скриптам командной оболочки объясняются основы.
Вы можете использовать TextEdit, но убедитесь, что файл представляет собой обычный текст: новые документы TextEdit могут быть в формате RTF. Выберите «Формат» > «Сделать обычным текстом» или установите формат нового документа TextEdit на «Обычный текст» в его настройках. Форматирование RTF — это не командная строка. Apple описывает эти параметры в своем руководстве по TextEdit . Также можно использовать редактор кода или редактор командной строки, например nano.
Сохраните скрипт с расширением .command в легкодоступном месте.
2. Сохраните его с помощью .commandрасширения.
Сохраните текстовый файл с описательным именем, например MyScript.command, `.`. Расширение `.` поможет Finder открыть скрипт в Терминале при двойном щелчке. В архивной документации для разработчиков Apple описан этот алгоритм двойного щелчка для скриптов оболочки. Проверьте окончательное имя в Finder: если оно заканчивается на `.` .command.txt, переименуйте его так, чтобы окончательное расширение было просто ` .command.`. Сохраните пример в таком месте, как рабочий стол, пока будете его настраивать.
Если macOS спросит, какое расширение использовать, сохраните .commandи убедитесь, что Finder его не добавил .txt.
3. Сделайте скрипт исполняемым.
Откройте Терминал и предоставьте своей учетной записи разрешение на выполнение файла. Для примера, сохраненного на рабочем столе, введите:
chmod u+x "$HOME/Desktop/MyScript.command"
Нажмите Enter. u+xЭто добавит разрешение на выполнение для владельца; кавычки защищают пути пробелами. При необходимости замените пример пути. Перетащите файл в Терминал или используйте меню Finder (Option+клик), чтобы скопировать его путь. Apple показывает тот же метод в своих инструкциях по исполняемым файлам .
Команда `chmod` добавляет права на выполнение для владельца файла.
4. Запустите скрипт.
Дважды щелкните MyScript.commandв Finder, чтобы запустить его в Терминале. Вывод и ошибки отобразятся там. Или введите полный путь к файлу:
"$HOME/Desktop/MyScript.command"
Или сначала перейдите в папку, а затем добавьте перед именем файла двоеточие ( ./:).
cd "$HOME/Desktop"
./MyScript.command
Эта команда ./указывает оболочке запустить файл в текущей папке. В руководстве по команде Terminal от Apple объясняется, как запустить исполняемый файл по пути к нему.
Запустите файл, указав его путь, и проверьте результат в Терминале.
Устранение распространенных ошибок
«Отказано в доступе»: Убедитесь, что вы выполнили команду chmod u+xдля правильного файла. При необходимости повторите команду, используя точный путь к файлу. Предоставление файлу права на выполнение не разрешает выполнение всех команд внутри него.
«Нет такого файла или каталога»: подтвердите местоположение и правильность написания, включая расширение. Файл, случайно сохраненный как [укажите имя MyScript.command.txtфайла], не будет соответствовать приведенной выше команде. Перетаскивание файла в Терминал может помочь вставить его путь.
Команда работает при вводе, но не в скрипте: скрипт может использовать другую оболочку или полагаться на псевдонимы, переменные окружения или рабочий каталог из вашей интерактивной сессии Терминала. Используйте правильный shebang, избегайте использования псевдонимов и явно указывайте пути к файлам. Если командам требуется определенная папка, добавьте соответствующую cdстроку в начале скрипта.
Прежде чем делиться информацией, ознакомьтесь с правами доступа.
Бит выполнения отделен от прав доступа к конфиденциальной информации. Скрипт обычно запускается от имени вашей учетной записи; используйте его sudoтолько для команд, требующих прав администратора.
macOS может запрашивать доступ к защищенным папкам или другим приложениям. Проверяйте каждый запрос и разрешайте только то, что необходимо. Проверьте меню Apple > Системные настройки > Конфиденциальность и безопасность для файлов и папок и связанных с ними параметров конфиденциальности . Разрешение зависит от запрашиваемого доступа и запрашивающего приложения; это не общие разрешения для каждой команды и не передаются вместе с общим скриптом.
Перед запуском или распространением скрипта внимательно прочтите каждую строку и убедитесь, что понимаете, что она изменяет. .commandФайл удобен тем, что может быть запущен сразу после открытия, поэтому используйте только файлы из источников, которым вы доверяете.