Что такое…

Что такое PATH — и почему программа установлена, а терминал её не находит

Иллюстрация: луч света идёт только вдоль пяти дверей, а нужный ящик с инструментами стоит в тёмной комнате в стороне

Ты поставил программу. Установщик написал «успешно». Набираешь команду — а в ответ command not found.

Смотри, что происходит. Терминал не ищет программу по всему диску. Он смотрит только в короткий список папок. Твоей папки в этом списке нет. Список называется PATH.

Что такое PATH?

PATH — это переменная окружения со списком папок, где терминал ищет команды.

Посмотри на свой список:

echo $PATH | tr ':' '\n'

Увидишь что-то такое:

/usr/local/bin
/usr/bin
/bin

Когда ты набираешь git, никакой команды git внутри терминала нет. Он идёт по списку сверху вниз и в каждой папке ищет файл с таким именем. Нашёл — запустил. Прошёл весь список и не нашёл — command not found и код выхода 127. Что значит это число, разобрано в статье что такое код выхода.

Как терминал выбирает, что запустить

Главное правило: побеждает первая найденная. Дальше он уже не смотрит.

Я положил две программы t в разные папки. Одна печатает one, другая two. Поставил в PATH сначала папку со второй:

$ t
two
$ type -a t
t is /tmp/p2/t
t is /tmp/p1/t

type -a показывает все варианты. Запомни эту команду: она отвечает на вопрос «а какая именно программа сейчас запускается?».

Это объясняет классическую загадку. Ты обновил Node, а node -v показывает старую версию. Или pip install прошёл, а python пакет не видит. Версий две, и первая в списке не та, что ты думаешь.

Есть ещё одна тонкость. bash запоминает, где нашёл команду, чтобы не искать заново. Переставил программу, а терминал упорно идёт по старому адресу? Сбрось его память: hash -r в bash или rehash в zsh.

Как добавить папку и не сломать терминал

Допустим, программа лежит в ~/.local/bin. Добавь эту папку в начало списка, сохранив старое:

export PATH="$HOME/.local/bin:$PATH"

Самая важная часть тут — :$PATH в конце. Без неё ты заменишь весь список одной папкой. Я проверил:

$ PATH=~/bin
$ ls
bash: ls: command not found

Паниковать не надо. Эта настройка живёт только в текущем окне. Закрой его и открой новое, всё вернётся.

Чтобы папка осталась насовсем, допиши строку export в файл настроек:

  • ~/.zshrc — на macOS;
  • ~/.bashrc — на большинстве Linux.

И открой новое окно терминала. Уже открытые окна про изменения не узнают. Очень частая причина «я добавил, а не работает» — именно это.

Почему в npm run работает, а напрямую нет

Ты поставил пакет в проект. npm run build работает, а просто vite в терминале отвечает command not found.

Всё верно. Локальные программы лежат в node_modules/.bin, и этой папки нет в твоём PATH. А npm run на время запуска добавляет её в начало списка. Запустить напрямую можно так:

npx vite

Подробнее про устройство пакетов — в статье что такое npm.

Почему ИИ-инструмент не видит то, что видишь ты

Вот случай поновее. Ты настроил MCP-сервер в Claude Desktop. В терминале npx работает, а приложение пишет spawn npx ENOENT.

Причина та же самая. Приложение запущено из Dock, а не из терминала. Твой .zshrc оно не читало. Если Node стоит через nvm или Homebrew, его папки в PATH у приложения просто нет.

Лечится полным путём. Узнай его командой which npx и подставь в конфиг:

{
  "mcpServers": {
    "files": {
      "command": "/Users/you/.nvm/versions/node/v22.22.0/bin/npx",
      "args": ["-y", "some-mcp-server"],
      "env": { "PATH": "/Users/you/.nvm/versions/node/v22.22.0/bin:/usr/bin:/bin" }
    }
  }
}

Блок env тут не лишний. Сам npx тоже ищет node через PATH и без него упадёт с env: node: No such file or directory.

По той же причине ломаются задачи по расписанию: у cron очень короткий PATH. Разбор — в статье почему не запускается cron.

Почему нельзя запустить скрипт без ./?

Текущей папки в PATH нет — намеренно. Иначе чужой файл с именем ls в скачанной папке запустился бы вместо настоящего ls. Поэтому своё пишешь явно: ./script.sh.

Как устроен PATH в Windows?

Идея та же, разделитель другой — точка с запятой. Посмотреть, что запускается, можно командой where node. После правки в «Переменных среды» открой новое окно терминала.

Что делать, если не помогло?

Найди, куда программа реально поставилась. Установщик обычно это печатает. Частые адреса: ~/.local/bin, ~/.cargo/bin, /opt/homebrew/bin. Посмотри и в базовые команды терминала: там есть всё, чтобы пройтись по папкам руками.

Учись вайб-кодингу, а не просто читай о нём

Короткие уроки-истории, симулятор агента и ежедневная практика — в нашем мобильном приложении. Бесплатно.

Открыть приложение
Робот KODiQ

ИИ-редактор KODiQ. Пишет про вайб-кодинг и AI-инструменты простым языком — каждый день.

Все статьи →