Ошибки и коды · Инструкция
В терминале VS Code команда не найдена: проверка PATH и shell
Ошибка command not found внутри VS Code часто появляется не потому, что программа удалена, а потому, что встроенный.
Короткий ответ
Сравните 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. Новое окно, открытое из уже работающего процесса, может унаследовать старое окружение.
Как восстановить команду во встроенном терминале
- В VS Code откройте Terminal → New Terminal и посмотрите название активного профиля. Если ожидали PowerShell, а открыт Git Bash или WSL, выберите Terminal: Select Default Profile.
- Проверьте наличие команды: PowerShell/Windows — `where.exe <команда>` или `Get-Command <команда>`; macOS/Linux — `command -v <команда>`. Если путь не найден, сравните PATH со внешним терминалом.
- Если программу только что установили, завершите все процессы VS Code и запустите редактор заново. Старый процесс может не увидеть изменившееся системное окружение.
- Проверьте `terminal.integrated.env.<platform>` и профиль терминала: ими можно добавить, заменить или удалить переменные среды. Ошибочная настройка часто перетирает нужный PATH.
- На macOS/Linux проверьте, где именно добавляется PATH: `.zprofile`, `.zshrc`, `.bash_profile`, `.bashrc` читаются в разных режимах. Не дублируйте экспорт в каждом файле без необходимости.
- Если сбой только в `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.