n1ro°
RU

Ошибки и коды · Инструкция

В терминале VS Code команда не найдена: проверка PATH и shell

Ошибка command not found внутри VS Code часто появляется не потому, что программа удалена, а потому, что встроенный.

Редакция N1RO · Проверено

Короткий ответ

Сравните shell и PATH во внешнем терминале и во встроенном терминале VS Code, затем полностью перезапустите редактор после изменения системного окружения. Если сбой есть только в Task, сравните automation profile и окружение задачи с интерактивным терминалом.

Почему одна и та же команда видна не во всех терминалах

VS Code запускает интегрированный терминал через выбранный terminal profile, а его окружение зависит от того, как был запущен сам редактор и какие startup-файлы читает shell. На Windows PowerShell, Command Prompt, Git Bash и WSL имеют разные правила поиска исполняемых файлов; на macOS и Linux различаются login и interactive shell. Поэтому команда `node`, `python`, `git`, `nvm` или собственный CLI может присутствовать во внешнем терминале и отсутствовать во встроенном. Сначала не меняйте PATH вслепую: выполните команду, которая показывает текущий shell, затем выведите PATH и найдите исполняемый файл `where.exe <команда>` или `Get-Command <команда>` в PowerShell/Windows, либо `command -v <команда>` на macOS/Linux. Повторите те же проверки снаружи VS Code. Если путь к программе присутствует только во внешней сессии, причина уже локализована: различается процесс инициализации окружения, а не сам бинарник.

Важно: После установки нового CLI полностью закройте все окна VS Code. Новое окно, открытое из уже работающего процесса, может унаследовать старое окружение.

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

  1. В VS Code откройте Terminal → New Terminal и посмотрите название активного профиля. Если ожидали PowerShell, а открыт Git Bash или WSL, выберите Terminal: Select Default Profile.
  2. Проверьте наличие команды: PowerShell/Windows — `where.exe <команда>` или `Get-Command <команда>`; macOS/Linux — `command -v <команда>`. Если путь не найден, сравните PATH со внешним терминалом.
  3. Если программу только что установили, завершите все процессы VS Code и запустите редактор заново. Старый процесс может не увидеть изменившееся системное окружение.
  4. Проверьте `terminal.integrated.env.<platform>` и профиль терминала: ими можно добавить, заменить или удалить переменные среды. Ошибочная настройка часто перетирает нужный PATH.
  5. На macOS/Linux проверьте, где именно добавляется PATH: `.zprofile`, `.zshrc`, `.bash_profile`, `.bashrc` читаются в разных режимах. Не дублируйте экспорт в каждом файле без необходимости.
  6. Если сбой только в `tasks.json`, проверьте `terminal.integrated.automationProfile.<platform>` и фактический PATH задачи. Не рассчитывайте, что Task автоматически получит те же alias и shell-init правила, что интерактивный терминал.

Предупреждение: Не лечите Task постоянным запуском login-shell без понимания причины: это может менять aliases, PATH и поведение скриптов в CI по-разному.

Где искать причину

  • Не работает только встроенный Terminal. Профиль shell и terminal.integrated.env. Другой shell или PATH
  • Не работает только Task. Запуск команды вручную и через task. Другой automation profile, PATH или shell-init сценарий
  • После установки CLI старый Terminal не видит команду. Полный restart VS Code. Старое окружение процесса
  • Работает в одном окне VS Code, не работает в другом. Как и когда запущены окна. Наследование окружения от первого процесса

Особый случай nvm, pyenv и других менеджеров версий

Менеджеры версий часто добавляют команды и меняют PATH не системно, а через shell startup script. Именно поэтому `nvm` — классический пример: интерактивный терминал может знать о нём, а Task или debug-процесс — не обязательно. Надёжная схема для автоматизации состоит в том, чтобы либо использовать полный путь к исполняемому файлу, либо обеспечить доступность runtime через PATH до запуска задачи, либо явно и воспроизводимо инициализировать менеджер в скрипте проекта. Не стоит полагаться на alias, созданный только для удобства человека в `.zshrc`: tasks, debug adapters и CI могут работать в другом окружении и не увидеть его. Для Python похожая путаница возникает между системным Python, virtualenv и интерпретатором, выбранным расширением; терминал и extension host — разные слои. Для Node сравните `node -p process.execPath` и `npm`/`npx` в том же терминале, где запускаете задачу. Цель — сделать путь к инструменту явным и одинаково воспроизводимым.

Совет: Если команда нужна проекту, закрепите способ её получения в README/скриптах проекта, а не только в личном профиле shell.

Почему terminal.integrated.inheritEnv не универсальное лекарство

У VS Code есть настройка наследования окружения и отдельные `terminal.integrated.env.<platform>`, но изменение этих параметров без сравнения фактического PATH может создать вторую проблему вместо первой. Документация отдельно описывает ситуации на macOS, когда login shell повторно перестраивает PATH и порядок директорий становится неожиданным. Если пути дублируются или меняются местами, сначала зафиксируйте вывод PATH во внешнем терминале, в первом окне VS Code и в новом интегрированном терминале. Затем меняйте один источник: startup-файл shell, terminal profile или настройку окружения VS Code. После изменения создавайте новый terminal instance, а при системном PATH — полностью перезапускайте редактор. Такой порядок позволяет понять, на каком уровне исчезает команда, и не маскировать ошибку ручным `export PATH=..` в каждой вкладке.

Минимальная проверка перед переустановкой инструмента

  • Одинаковый ли shell используется внутри и снаружи VS Code.
  • Есть ли каталог CLI в PATH внутри VS Code.
  • Видит ли `where.exe`/`Get-Command`/`command -v` конкретный бинарник.
  • Перезапущен ли весь VS Code после изменения системного PATH.
  • Не переопределяет ли PATH terminal.integrated.env или профиль.
  • Не запускается ли проблема только из Task с другим режимом shell.

Что учитывать

VS Code запускает интегрированный терминал через выбранный terminal profile, а его окружение зависит от того, как был запущен сам редактор и какие startup-файлы читает shell. На Windows PowerShell, Command Prompt, Git Bash и WSL имеют разные правила поиска исполняемых файлов; на macOS и Linux различаются login и interactive shell. Поэтому команда `node`, `python`, `git`, `nvm` или собственный CLI может присутствовать во внешнем терминале и отсутствовать во встроенном. Сначала не меняйте PATH…

Источники и проверка

Фактическая часть сверена по первичным источникам (в т.ч. Terminal Profiles). Пример и формулировки — редакция N1RO на 2026-09-20.