Ошибка «sh не является внутренней или внешней командой»: причины и решения

Ошибка "sh" не является внутренней или внешней командой, исполняемой программой или пакетным файлом появляется в командной строке Windows при попытке запустить интерпретатор sh (Bourne Shell), которого в системе просто нет — это компонент Unix-подобных ОС, а не Windows. Командная строка cmd.exe ищет исполняемый файл sh.exe в папках, перечисленных в переменной окружения PATH, и, не находя его, выдаёт это сообщение. Проблема типична при запуске скриптов из репозиториев Git, сборке проектов через npm или выполнении инструкций, написанных для Linux и macOS.

Хорошая новость в том, что ошибка не говорит о поломке системы — она лишь указывает на отсутствие нужного инструмента. Ниже разберём, почему возникает эта ситуация, и рассмотрим несколько рабочих способов запустить sh-скрипты в Windows: от установки Git Bash до подсистемы WSL.

Почему Windows не знает команду sh

Команда sh — это стандартная командная оболочка Unix-систем. В Windows её роль выполняют cmd.exe и PowerShell, а синтаксис этих оболочек несовместим с синтаксисом sh. Поэтому скрипт с расширением .sh нельзя просто запустить двойным щелчком или вводом имени в командной строке.

Когда вы вводите команду, Windows ищет соответствующий исполняемый файл в текущей папке и во всех каталогах переменной PATH. Если sh.exe там нет — появляется знакомое сообщение об ошибке. Проверить содержимое переменной можно командой:

echo %PATH%

Типичные сценарии, в которых возникает ошибка:

  • 🐧 Запуск скрипта install.sh или build.sh из репозитория, клонированного с GitHub
  • 📦 Выполнение npm run-скрипта, внутри которого вызывается sh-команда
  • 🔧 Следование инструкции по установке, написанной для Linux или macOS
  • 💻 Работа в среде разработки, где сборка завязана на Unix-утилиты

Способ 1. Установить Git Bash

Самый простой путь для большинства пользователей — установить Git for Windows. Вместе с системой контроля версий он ставит Git Bash — полноценную Unix-подобную оболочку с командой sh и набором базовых утилит (ls, grep, sed и других).

Порядок действий: скачайте установщик с официального сайта git-scm.com, запустите его и пройдите мастер установки — параметры по умолчанию подходят для большинства задач. После установки в контекстном меню проводника появится пункт Git Bash Here, а сама оболочка запустится из меню «Пуск».

⚠️ Внимание: скачивайте Git только с официального сайта проекта. Сторонние «сборки» и файлообменники могут подсовывать модифицированные установщики с лишним ПО.

После установки кликните правой кнопкой в папке со скриптом, выберите Git Bash Here и выполните:

sh script.sh

Либо сделайте скрипт исполняемым и запустите напрямую: ./script.sh. Если в ответ снова приходит ошибка «команда не найдена» — проверьте, что вы действительно находитесь в окне Git Bash (приглашение строки там выглядит иначе, чем в cmd), а не в обычной командной строке.

📊 В каком сценарии вы столкнулись с ошибкой «sh не является командой»?
Запуск скрипта из GitHub-репозитория
Сборка проекта через npm/node
Выполнение инструкции для Linux
Запуск sh в cmd или PowerShell из любопытства

Способ 2. Добавить sh в переменную PATH

Если Git уже установлен, но ошибка возникает при вызове sh из обычного cmd или из скриптов сборки — значит, папка с sh.exe не прописана в PATH. Обычно исполняемый файл лежит в подкаталоге bin внутри папки установки Git, например C:\Program Files\Git\bin. Точный путь зависит от того, куда вы ставили Git, поэтому сверьтесь с реальным расположением на вашем компьютере.

Чтобы добавить путь, откройте Панель управления → Система → Дополнительные параметры системы → Переменные среды, найдите переменную Path и добавьте туда путь к папке bin Git. После сохранения закройте и заново откройте командную строку — изменения не подхватываются в уже открытых окнах.

☑️ Проверка после добавления sh в PATH

Выполнено: 0 / 5

Проверить результат помогут две команды:

where sh

sh --version

Первая покажет, какой именно файл находит система, вторая подтвердит, что интерпретатор запускается. Если where sh ничего не выводит — путь указан неверно или окно терминала не было перезапущено.

Способ 3. Использовать WSL — подсистему Windows для Linux

Для серьёзной работы с Unix-скриптами лучше подходит WSL (Windows Subsystem for Linux) — полноценное Linux-окружение внутри Windows. Это официальная функция Microsoft, доступная в современных версиях Windows 10 и Windows 11.

Установка выполняется одной командой в PowerShell, запущенном от имени администратора:

wsl --install

После перезагрузки компьютера будет развёрнут дистрибутив (по умолчанию — Ubuntu), и вы получите настоящий bash/sh со всеми стандартными утилитами. Файлы Windows доступны из WSL по пути вида /mnt/c/..., поэтому скрипты из проектов запускаются без копирования.

Учтите, что WSL требует включённой виртуализации в BIOS/UEFI на большинстве систем. Если установка завершается ошибкой — проверьте этот параметр. Точные названия пунктов зависят от производителя материнской платы, поэтому сверяйтесь с документацией к вашему устройству.

Сравнение способов решения

Выбор инструмента зависит от того, насколько глубоко вы работаете с Unix-окружением. Краткое сравнение:

СпособСложность установкиЧто даётКому подходит
Git BashНизкаяsh, bash и базовые утилитыЗапуск отдельных скриптов
Git Bash + PATHНизкаяВызов sh из cmd и npmСборка проектов в Windows
WSLСредняяПолноценный LinuxРазработчики, DevOps
MSYS2 / CygwinСредняяUnix-утилиты и пакетыСпецифические сборки

Для разового запуска скрипта достаточно Git Bash. Если вы регулярно собираете проекты с Unix-зависимостями, имеет смысл сразу настроить WSL — это снимет большинство проблем совместимости в будущем.

Что делать, если скрипт запускается, но падает с ошибками

Если sh нашёлся, но скрипт внутри выдаёт ошибки вида «command not found» уже на другие команды — в скрипте используются утилиты, которых нет в Git Bash (например, apt, systemctl). Это признак того, что скрипт рассчитан на полноценный Linux, и корректный путь — запускать его в WSL или на Linux-машине, а не в Git Bash.

Частые ошибки и подводные камни

Даже после установки интерпретатора sh-скрипты могут вести себя неожиданно. Одна из частых причин — окончания строк в стиле Windows (CRLF) вместо Unix-стиля (LF). Скрипт, сохранённый в Windows-редакторе, может падать с загадочными ошибками вроде \r: command not found. Лечение — пересохранить файл с окончаниями LF (это умеют Notepad++, VS Code и сам Git при правильной настройке core.autocrlf).

⚠️ Внимание: не запускайте sh-скрипты из непроверенных источников. В отличие от bat-файлов, их содержимое многие пользователи Windows не умеют читать, а скрипт может выполнять любые действия с файлами. Перед запуском откройте скрипт в текстовом редакторе и убедитесь, что понимаете, что он делает.

Ещё один нюанс — пути с пробелами и кириллицей. Если скрипт или папки на пути к нему содержат русские буквы, часть утилит может работать некорректно. По возможности размещайте проекты в каталогах с латинскими именами без пробелов.

Наконец, помните про различие оболочек: команда sh внутри Git Bash и команда sh в cmd — разные миры. Если инструкция говорит «выполните в терминале», уточняйте, какой именно терминал имеется в виду.

Часто задаваемые вопросы

Можно ли запустить sh-скрипт без установки сторонних программ?

Штатными средствами cmd и PowerShell — нет, они не понимают синтаксис sh. Минимальный вариант без «сторонних» решений — включить WSL, поскольку это встроенная функция Windows. В остальных случаях потребуется Git Bash или аналогичная среда.

Чем sh отличается от bash?

sh — базовый стандарт командной оболочки, а bash — его расширенная и самая распространённая реализация. Большинство скриптов, написанных под sh, корректно выполняются в bash. В Git Bash команда sh фактически вызывает bash в режиме совместимости.

Ошибка возникает при npm install — что делать?

Значит, один из пакетов или скриптов в package.json вызывает sh. Установите Git for Windows и укажите npm использовать его оболочку: npm config set script-shell "C:\Program Files\Git\bin\bash.exe" (путь скорректируйте под свою установку). После этого перезапустите установку зависимостей.

Как запустить sh-скрипт двойным щелчком мыши?

Надёжнее всего создать рядом bat-файл-обёртку с командой вызова Git Bash, например: "C:\Program Files\Git\bin\bash.exe" script.sh. Прямая ассоциация .sh-файлов с bash.exe тоже возможна, но bat-обёртка проще в отладке и не меняет системные настройки.

Поможет ли переустановка Windows?

Нет. Отсутствие sh — не неисправность, а особенность платформы: этой оболочки нет в Windows по умолчанию. Достаточно установить Git Bash или включить WSL, и ошибка исчезнет без какого-либо вмешательства в систему.