Содержание статьи

Файл build.sh обычно содержит последовательность команд для сборки проекта: компиляцию исходников, установку зависимостей, запуск тестов или подготовку артефактов. В Linux и macOS такой файл не запускается автоматически по двойному клику, как в графических системах Windows. Для выполнения требуется корректное имя интерпретатора, права на запуск и понимание текущего окружения.
Чаще всего проблемы возникают из-за отсутствия флага выполнения, неверного пути к файлу или различий между оболочками bash, sh и zsh. В macOS по умолчанию используется zsh, тогда как многие скрипты пишутся с расчётом на bash. В Linux дистрибутивы также могут отличаться настройками оболочки и правами доступа в файловой системе.
, sh и zsh. В macOS по умолчанию используется zsh, тогда как многие скрипты пишутся с расчётом на bash. В Linux дистрибутивы также могут отличаться настройками оболочки и правами доступа в файловой системе.»>
В статье рассматриваются практические шаги: как проверить атрибуты файла, как выдать разрешение на запуск, каким способом вызвать скрипт напрямую или через интерпретатор, а также какие ошибки встречаются при запуске build.sh на разных системах. Все примеры ориентированы на работу из терминала и подходят для реальных рабочих окружений.

Проверка прав доступа к файлу build.sh

Перед запуском build.sh необходимо убедиться, что файл имеет право на выполнение. Для этого в каталоге со скриптом выполните команду ls -l build.sh. В начале строки отображаются атрибуты доступа, например -rwxr-xr—, где символ x указывает на возможность запуска.
необходимо убедиться, что файл имеет право на выполнение. Для этого в каталоге со скриптом выполните команду ls -l build.sh. В начале строки отображаются атрибуты доступа, например -rwxr-xr—, где символ x указывает на возможность запуска.»>
Первый блок прав относится к владельцу файла, второй – к группе, третий – ко всем остальным пользователям. Если в соответствующем блоке отсутствует x, оболочка не позволит выполнить скрипт напрямую и вернёт сообщение о запрете доступа. На macOS и Linux поведение в этом случае одинаковое.
При работе в проектах с общим доступом полезно учитывать, от чьего имени выполняется терминал. Запуск под другим пользователем или через sudo меняет контекст прав и может повлиять на результат проверки, поэтому анализ атрибутов файла лучше проводить в том же окружении, где планируется запуск.
Назначение права на выполнение через chmod

Если у файла build.sh отсутствует флаг выполнения, его нужно добавить вручную. Для этого используется команда chmod, которая изменяет атрибуты доступа в файловой системе. Работать следует из каталога, где расположен скрипт, либо указывать полный путь к файлу.
На практике применяются следующие варианты:
- chmod +x build.sh – добавляет право на выполнение для владельца, группы и остальных пользователей;
- chmod u+x build.sh – разрешает запуск только владельцу файла;
- chmod ug+x build.sh – добавляет право на выполнение владельцу и группе;
- chmod 755 build.sh – задаёт права в числовом виде: запуск и чтение для владельца, чтение и запуск для остальных.
После выполнения команды стоит повторно проверить атрибуты через ls -l и убедиться, что в строке прав появился символ x. Без этого оболочка не сможет выполнить файл напрямую, даже если его содержимое корректно.
На macOS и Linux команда chmod работает одинаково, но в macOS возможна дополнительная блокировка из-за атрибутов карантина. В таком случае потребуется убрать соответствующий флаг отдельной командой, иначе скрипт не запустится, несмотря на выставленные права.
Запуск build.sh из текущего каталога

Для запуска build.sh из текущего каталога используется префикс ./, указывающий оболочке на явный путь к файлу. Команда имеет вид ./build.sh и выполняется только при наличии права на выполнение и корректного интерпретатора в первой строке скрипта.
Отсутствие ./ приводит к ошибке «command not found», так как текущий каталог по умолчанию не входит в переменную PATH. Это поведение одинаково для Linux и macOS и не зависит от используемой оболочки.
приводит к ошибке «command not found», так как текущий каталог по умолчанию не входит в переменную PATH. Это поведение одинаково для Linux и macOS и не зависит от используемой оболочки.»>
Перед запуском стоит проверить первую строку файла – shebang, например #!/bin/bash или #!/usr/bin/env bash. Именно она определяет, какой интерпретатор будет использован. Если путь указан неверно или интерпретатор отсутствует в системе, выполнение прервётся с ошибкой.
Запуск из текущего каталога удобен при работе с локальными проектами, так как исключает путаницу с версиями скрипта и позволяет явно контролировать, какой файл выполняется в данный момент.
Вопрос-ответ:
Почему build.sh не запускается командой build.sh без указания пути?
В Linux и macOS текущий каталог не входит в переменную PATH. Поэтому оболочка не ищет исполняемые файлы в текущей папке. Для запуска нужно указывать явный путь: ./build.sh. Без этого система считает, что команда отсутствует.
Как понять, что у build.sh нет права на выполнение?
Это проверяется командой ls -l build.sh. Если в строке прав отсутствует символ x для владельца или других пользователей, файл нельзя запустить напрямую. В таком случае оболочка вернёт сообщение о запрете доступа.
Можно ли запустить build.sh без изменения прав через chmod?
Да, скрипт можно выполнить через интерпретатор, например: bash build.sh или sh build.sh. В этом случае право на выполнение не требуется, так как запускается сама программа bash, а файл передаётся ей как аргумент.
Почему build.sh работает в Linux, но не запускается в macOS?
Частая причина — различия в оболочках и путях к интерпретатору. В macOS по умолчанию используется zsh, а путь к bash может отличаться. Также macOS может блокировать файлы, загруженные из интернета, через атрибут карантина.
Что означает ошибка bad interpreter при запуске build.sh?
Ошибка указывает на проблему в первой строке файла, где задан интерпретатор. Обычно это неверный путь, например /bin/bash, которого нет в системе, или использование Windows-переносов строк. Проверка shebang и перекодирование файла решают проблему.
Почему при запуске ./build.sh появляется ошибка «permission denied», хотя файл существует?
Сообщение указывает на отсутствие права на выполнение. Файл может быть доступен для чтения, но без флага x оболочка запрещает запуск. Проверка через ls -l покажет текущие атрибуты, а добавление права выполняется командой chmod +x build.sh.
Какой способ запуска build.sh выбрать для скрипта из репозитория?
Если файл только что получен из Git или архива, проще сначала выполнить его через интерпретатор: bash build.sh. Это позволяет проверить работу скрипта без изменения атрибутов. После этого имеет смысл назначить право на выполнение и запускать файл напрямую через ./build.sh.
