Имя Wsl не распознается как имя командлета функции файла сценария или исполняемой программы

Обновлено: 21.11.2024

Подробное руководство по обновлению подсистемы Windows для Linux до версии 2, также известной как WSL2, а также по обновлению Ubuntu до версии 20.04 и использованию WSL2 для повышения производительности Docker.

Теперь, когда обновление Windows 10 за май 2020 г. наконец-то доступно для всех, не требуется присоединяться к программе Инсайдеры Windows и устанавливать предварительные версии, наконец-то пришло время использовать WSL2.

WSL2 — это вторая версия подсистемы Windows для Linux, которая, наконец, позволяет запускать Linux виртуализированно внутри Windows. Эта новая версия обеспечивает настоящую виртуализацию с использованием настоящего ядра Linux, но по сравнению с традиционной виртуальной машиной она работает на облегченном гипервизоре, приближающемся к производительности «голого железа».

Это также будет использоваться Docker внутри, что увеличит время запуска и общую производительность наших контейнеров. Милая! Кроме того, с WSL2 VPN-подключения автоматически корректно распространяются на Linux, что является отличной новостью при работе из дома.

Итак, давайте замолчим и приступим к обновлению нашей среды Ubuntu 18.04 WSL до Ubuntu 20.04, работающей на WSL2.


Первое необходимое условие — наличие Обновления Windows 10 от мая 2020 года. Если у вас еще нет обновления, перейдите в Центр обновления Windows и проверьте наличие обновлений. Неудачно? Не беспокоиться! Мы можем получить обновление вручную с помощью Помощника по обновлению Windows. Microsoft хорошо спрятала его под длинным списком страниц, предлагающих вам запустить Центр обновления Windows, но у меня есть для вас ссылка. Перейдите на страницу загрузки помощника по обновлению Windows.

Страница загрузки помощника по обновлению Windows

Запустите помощник по обновлению, увидимся через час. 👋

Давайте начнем с открытия приглашения PowerShell 7 с повышенными правами. Обычная Windows PowerShell или Командная строка вполне подойдут, но почему бы не использовать новую кросс-платформенную версию PowerShell?

Совет для профессионалов: чтобы быстро запустить его, нажмите WIN + R, чтобы открыть диалоговое окно "Выполнить", затем введите pwsh и нажмите CTRL + SHIFT + ENTER, чтобы запустить его с повышенными правами.< /p>

Если у вас не установлена ​​PowerShell 7, скачайте ее прямо с GitHub, пока она еще горячая! Прокрутите страницу выпуска 7.0.1 до конца, загрузите 📦 PowerShell-7.0.1-win-x64.msi и установите его.

Теперь из приглашения с повышенными правами давайте попросим Windows установить необходимый компонент виртуализации.

В этом руководстве команды, которые вы должны вводить в приглашении PowerShell, начинаются с > , а следующие строки представляют собой вывод команды. Конечно, вам придется опустить начальный > при вводе команды. Позже, когда мы переключимся на приглашение WSL linux, команды будут указываться, начиная с $ .

Если вы видите приведенный выше результат, это означает, что вы, вероятно, уже включили его. Здорово! Если в нижней части экрана появится сообщение о том, что вам необходимо перезапустить Windows для завершения установки, добавьте эту ссылку в закладки, чтобы вы могли сразу перейти к следующему шагу, когда вернетесь. Увидимся через некоторое время.

Подготовка WSL2

Теперь, когда мы включили функцию виртуализации Windows, мы можем включить WSL2. Давайте откроем командную строку PowerShell 7, на этот раз повышать уровень не нужно, и введем следующую команду:

Давайте перейдем по ссылке, чтобы скачать ядро ​​Linux. Да, настоящее ядро Linux будет работать внутри WSL!


Загрузить пакет обновления ядра Linux

Приступим к настройке. Вас встретит милый пингвин 🐧. Нажмите Далее и подтвердите подсказку UAC.


Подсистема Windows для установки обновлений Linux

Поздравляем! WSL2 теперь включен и будет использоваться при установке Linux в будущем. Теперь пришло время обновить нашу существующую установку Ubuntu.

Создать резервную копию текущей установки Ubuntu

Сначала обо всем по порядку. Я почти уверен, что мне не нужно объяснять, насколько важно всегда иметь резервные копии, но это особенно верно перед обновлениями. Даже если все данные, которые у нас есть в нашей установке WSL, уже зарезервированы, мы хотим создать полный снимок, чтобы мы могли быстро вернуться в рабочее состояние, если что-то пойдет не так. Это также позволит вам быстро восстановить текущую настройку и запустите его рядом, если вы когда-нибудь решите, что он вам больше нравится (но поверьте мне, вы не захотите вернуться!).

Теперь вернемся к нашей подсказке и перечислим установленные дистрибутивы на WSL. Если у нас есть Ubuntu, она должна называться… ты догадался? Убунту!

Давайте также удостоверимся, что состояние равно Stopped . Если это не так, убедитесь, что приглашение WSL не открыто, затем введите следующую команду, а затем используйте предыдущую команду списка, чтобы убедиться, что она завершена.

Хорошо! мы не готовы создать резервную копию. Эта следующая команда создаст файл с именем ubuntu-backup.tar.gz в текущей папке. Вы можете настроить имя файла по своему вкусу и в конечном итоге указать путь.

В PowerShell, чтобы указать путь, вы можете использовать \ или / , просто не забудьте заключить путь в двойные кавычки, если у вас есть пробелы).

Если вы хотите перестраховаться, вы также можете скопировать этот архив в предпочитаемое место резервного копирования.

Если вы включили функцию резервного копирования важных папок компьютера OneDrive для синхронизации папки Документы, вы можете просто скопировать ее туда, и она будет автоматически синхронизирована. Аккуратный! Узнайте, как создавать резервные копии папок «Документы», «Изображения» и «Рабочий стол» с помощью OneDrive.

Теперь, когда у нас есть подушка безопасности, мы можем двигаться дальше.

Обновление Ubuntu до версии 20.04 на WSL2

В качестве первого шага давайте настроим нашу установку Ubuntu на использование WSL2.

Это было легко! Теперь мы можем загрузить нашу Ubuntu на ранее установленном ядре, получив все преимущества WSL2.

Чтобы загрузить его, мы можем:

    Введите wsl в командной строке PowerShell

Ubuntu в меню "Пуск" Windows

Новая вкладка Ubuntu в терминале Windows

После того, как мы перешли к Ubuntu, давайте начнем обновление до последней версии: 20.04 Focal Fossa.

Викторина: кодовые имена версии Ubuntu состоят из прилагательного и имени животного, использующих одну и ту же букву, каждая версия использует следующую букву, а не предыдущую. Это второй цикл по алфавиту.

Напоминание: в этом руководстве команды, которые вы должны вводить в приглашении WSL linux, начинаются с $ . Конечно, вам придется опустить начальный $ при вводе команды. Следующие строки без знака $ представляют вывод команды.

Прежде чем он начнет фактическое обновление, он даст нам немного информации.

Например, мы могли бы получить это сообщение, если бы мы установили программное обеспечение из сторонних репозиториев, но не о чем беспокоиться, мы можем повторно включить их позже, если это необходимо. В этом случае просто нажмите клавишу ввода .

Затем мы получим отчет о том, сколько пакетов необходимо обновить и сколько данных будет загружено.

Введите d, если хотите просмотреть список пакетов, а затем вернитесь, нажав q .

Чтобы продолжить, нажмите y, затем введите .

Во время этого процесса мы, вероятно, получим уведомление о конфликте при обновлении конфигурации OpenSSH.

<Р> Экран конфигурации конфликта

Экран конфликта конфигурации

Установщик предлагает нам сохранить локальную текущую версию, чтобы не рисковать. Однако, если мы знаем, что не вносили никаких изменений намеренно, мы можем установить версию сопровождающего пакета, чтобы вернуться к конфигурации по умолчанию, что также имеет то преимущество, что будущие обновления будут проходить гладко. В любом случае, мы должны сначала проверить, в чем различия, выбрав показать различия между версиями: удаленные строки будут начинаться с - , а добавленные строки - с + . Строки @@ указывают на то, что отсутствующая часть документа неактуальна, поскольку не изменилась.


Просмотр различий в конфликте конфигурации

На скриншоте выше мы видим несколько изменений:

Давайте вернемся к подтверждению с помощью Enter на выделенном ОК, и, если у вас нет дополнительных изменений, которые вы хотите сохранить, вы можете продолжить установку версии сопровождающего пакета .

После того, как это будет завершено, нас попросят удалить устаревшее программное обеспечение. Это пакеты, которые больше не нужны или имеют лучшие замены, поэтому обычно рекомендуется избавиться от них.

Как и прежде, введите d, если хотите просмотреть список пакетов, а затем вернитесь, нажав q .

Чтобы продолжить, нажмите y, затем введите .

И это был последний шаг, теперь нас будет приветствовать сообщение о завершении!

Поскольку WSL не является настоящей виртуальной машиной, она не может перезагружаться сама. Итак, давайте отменим перезагрузку, нажав N или введите .

Если буква в подсказке с множественным выбором написана в верхнем регистре, это означает, что это действие по умолчанию при продолжении ввода .

Когда мы вернемся к подсказке, давайте выйдем с помощью команды, как вы уже догадались, exit .

Последовательность CTRL + D эквивалентна выходу в большинстве оболочек Linux.

Теперь из подсказки PowerShell нам нужно убедиться, что WSL остановлен. Это происходит автоматически при закрытии последнего процесса, но давайте подтвердим это.

Если состояние не Stopped , завершим его следующей командой:

Наше обновление завершено!

Проверьте обновление

Теперь вернемся к WSL, запустив Ubuntu.

Напоминание: чтобы запустить WSL, найдите Ubuntu в меню "Пуск", введите wsl в командной строке PowerShell или откройте вкладку Ubuntu в Терминале Windows.

Давайте проверим, какую версию Ubuntu мы используем. Во второй строке должно быть указано 20,04 LTS (Focal Fossa).

Мы также можем убедиться, что используем новое ядро ​​WSL.

Помните, что в начале процесса обновления нам сообщили, что сторонние источники будут отключены? Давайте проверим исходники пакетов!


Затем мы можем выйти, нажав Ctrl + X, как показано в нижнем левом углу с помощью ^X, поскольку ^ указывает на клавишу CTRL.

Обновление стороннего программного обеспечения

Несмотря на то, что все установленное программное обеспечение, полученное непосредственно из репозиториев Ubuntu, было автоматически обновлено, для программного обеспечения, установленного из сторонних репозиториев, потребуется указать репозитории для правильной Ubuntu версии, а затем обновите программное обеспечение. В последние годы для настройки сторонних репозиториев больше не требуется вручную редактировать файлы конфигурации, а достаточно просто установить пакет deb.

deb — это формат пакета для приложения, распространяемого для дистрибутива Linux Debian, который также принят Ubuntu, поскольку он был производным от Debian .

Каждый раз, когда мы добавляем новый источник пакетов, нам нужно обновлять список доступных пакетов.

apt — это новая улучшенная версия apt-get, которая, хотя и менее функциональна, имеет более простые команды и визуальные улучшения, такие как строка состояния.

Наконец-то запустите команду установки! Если пакет уже установлен, он будет обновлен!

Докер

Теперь, когда мы закончили обновление Ubuntu, давайте перейдем к Docker 🐋. Как мы упоминали в начале, новая итерация WSL также обеспечивает лучшее время запуска Docker и общую производительность, поэтому пришло время запрыгнуть на борт Docker на скоростном катере WSL2!

Или я должен был сказать парусник? Я не уверен, что это лучшая метафора, когда кит контейнеров Docker становится быстрее… дайте мне знать в комментариях, если у вас есть предложение, или свяжитесь с нами в твиттере @AleFranz.

Давайте откроем меню «Пуск» и запустим Docker. Нас должно приветствовать приглашение переключиться на серверную часть на основе WSL2.

<Р> Докер рабочий стол запрос на переключение на WSL2

Docker Desktop предлагает перейти на WSL2

Давайте подтвердим включение WS2 .

Если у вас уже запущен Docker Desktop, вам нужно сначала закрыть его, чтобы получить это приглашение. В противном случае вы всегда можете щелкнуть правой кнопкой мыши значок Docker на панели задач, выбрать «Настройки» и на вкладке «Общие» установить галочку «Использовать механизм на основе WSL2» , затем подтвердить, нажав «Применить» и Начать сначала .

Окно настроек Docker Desktop

Если параметр отсутствует, необходимо обновить Docker Desktop.Поскольку проверка версии обычно выполняется автоматически при запуске. Если он уже запущен, сначала закройте его, щелкнув правой кнопкой мыши значок на панели задач, а затем выйдите из Docker Desktop. Запустите его снова, чтобы увидеть экран подтверждения обновления, затем подтвердите, нажав «Установить обновление».

Запрос на обновление Docker Desktop

Теперь мы должны заметить всплывающее уведомление toast о том, что Docker Desktop запускается и использует механизм на основе WSL2.

<Р>

Docker Desktop запускается с всплывающим уведомлением серверной части WSL2

И это все!

Наслаждайтесь WSL2

Если вы дочитали до этого момента, спасибо, что остались со мной. Надеюсь, вам понравится новая Ubuntu и высокая производительность Docker. Если возникнут какие-либо проблемы, дайте мне знать в твиттере @AleFranz, и я буду рад помочь.

Не забудьте подписаться на меня, так как скоро у меня будет новый пост о том, как лучше всего его использовать!

Меня зовут Алессио Франчеселли. Я разработчик программного обеспечения из Лондона, Великобритания. Я работаю старшим главным инженером в компании Trainline, но мнения в этом блоге являются моими собственными.

Я установил ubuntu18.02 через магазин Windows и запустил его.

Я использую Window 10 дома на Corei7 4720HQ

Сборка ОС 18995.1

Моя версия Windows:
Microsoft Windows [версия 10.0.18995.1]

В powershell от имени администратора я ввожу

Я не вижу wsl в пути
dir C:\Windows\System32\wsl*

Заранее спасибо.

Сведения о документе

Текст был успешно обновлен, но возникли следующие ошибки:

plassa прокомментировал 7 ноября 2019 г.

У меня такая же проблема, когда wsl работает из cmd.exe, а не из powershell

@geeksupport1, почему вы это закрыли?

PS C:\WINDOWS\system32> wsl
wsl : Термин «wsl» не распознается как имя командлета, функции, файла сценария или исполняемой программы. Проверьте
написание имени или, если был указан путь, убедитесь, что путь указан правильно, и повторите попытку.
В строке:1 символ:1

прокомментировал timgilbert 16 ноября 2019 г.

Я наблюдал такое же поведение в Windows 10.0.19025.1, но после того, как я установил дистрибутив Ubuntu из магазина MS Store, команда wsl заработала для меня как в Powershell, так и в cmd.exe.

tkr789 прокомментировал 28 марта 2020 г. •

Я сделал все вышеперечисленное в Windows [версия 10.0.19041.172]. Переустановил Убунту 18.04. В powershell:

> wsl -l :
wsl : Термин «wsl» не распознается как имя командлета, функции, файла сценария или исполняемой программы. Проверьте
написание имени или, если был указан путь, убедитесь, что путь указан правильно, и повторите попытку.

> wsl --set-version 2 :
В строке:1 char:19
wsl --set-version 2
The ' > wsl -l :
ИМЯ ГОСУДАРСТВЕННАЯ ВЕРСИЯ
Ubuntu-18.04 Остановлена ​​1

wsl --set-version 2 :
Системе не удается найти указанный файл.

Я не нашел ничего, что бы это исправило.

JayElOpia прокомментировал 4 апреля 2020 г. •

показывает состояние «Включено» при запуске powershell от имени администратора, попробуйте вместо этого использовать 64-разрядную версию Powershell (powershell 6). Мне это помогло.

JayElOpia прокомментировал 4 апреля 2020 г. •

@tkr789 Для этой команды: wsl --set-version 2 угловые скобки не должны заключаться вокруг имени ОС.

Octy40 прокомментировал 11 сентября 2020 г.

@JayElOpia - работает 64-битная версия. Спасибо!

прокомментировал мошенник 21 сентября 2020 г.

После установки последней версии powershell (7.1.0-preview.7 — 08.09.2020, 64-разрядная версия) wsl по-прежнему не обнаруживается.

raajpackt прокомментировал 16 декабря 2020 г.

здесь та же проблема.

TeunvdWeij прокомментировал 19 января 2021 г.

Запуск: 'dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart'

Решил мою проблему. Вам нужно сначала установить wsl, чтобы он был распознан. Честно говоря, документы довольно расплывчаты, но теперь мне кажется, что это работает.

комментарий remco-pc от 10 февраля 2021 г.

Как ни странно.

wsl -lv работает в CMD, но не в powershell.

Поэтому выданное разрешено.

wsl виден в cmd.exe, но не в powershell.

Не знаю почему.

Остальные команды, относящиеся к wsl wslconfig, работают в cmd, но не в powershell.

Я много раз перезагружал компьютер.

с уважением

Вам необходимо установить пакет обновления ядра WSL2 Linux для компьютеров x64. тогда это работает как шарм

yudai-patronai прокомментировал 9 мая 2021 г.

@tkr789
Если эта команда:

Get-WindowsOptionalFeature -Online | Где-Объект | Format-Table

показывает вам состояние «Включено» при запуске powershell от имени администратора, попробуйте вместо этого использовать 64-битную версию Powershell (powershell 6). Мне это помогло.

Он показывает Enabled , но ни один из PowerShell не позволяет мне установить обновление wsl

Junayed5122 прокомментировал 1 июля 2021 г.

Сведения о документе

Думаю, сначала вам придется установить wsl. Вы можете использовать команду: wsl.exe --install в командной строке в режиме администратора. Затем вам нужно будет обновить его в Windows PowerShell с помощью команды: wsl --set-default-version 2. У меня это сработало.

AryanBhandari47 прокомментировал 8 августа 2021 г.

Я сделал все вышеперечисленное в Windows [версия 10.0.19041.172]. Переустановил Убунту 18.04. В powershell:

> wsl -l :
wsl : Термин «wsl» не распознается как имя командлета, функции, файла сценария или исполняемой программы. Проверьте
написание имени или, если путь был включен, проверьте правильность пути и повторите попытку.

> wsl --set-version 2 :
В строке :1 char:19
wsl --set-version 2
' > wsl -l :
ИМЯ СОСТОЯНИЕ ВЕРСИЯ
Ubuntu-18.04 Stopped 1

wsl --set-version 2 :
Система не может найти указанный файл.

Я не нашел ничего, что бы это исправило.

Сначала убедитесь, что включены следующие функции Windows:

  • Платформа гипервизора Windows
  • Подсистема Windows для Linux
    Теперь.
  1. Запустите cmd с правами администратора
  2. Запустите wsl --install
  3. Запустите wsl --set-default-version 2 (это установит для wsl значение по умолчанию 2, но не для Ubuntu)
  4. Запустите wsl --set-version Ubuntu-18.04 2
  5. Перезагрузите или обновите рабочий стол docker, выберите «Настройки»> «Ресурсы»> «Интеграция с wsl».
    Теперь вы можете включить интеграцию.
    ПРИМЕЧАНИЕ. wsl по-прежнему не работает с PowerShell

chicacode прокомментировал 9 августа 2021 г. •

У меня была такая же проблема,

Вы не можете выполнить это действие в данный момент.

Вы вошли в другую вкладку или окно. Перезагрузите, чтобы обновить сеанс. Вы вышли на другой вкладке или в другом окне. Перезагрузите, чтобы обновить сеанс.

Выполнил Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform , который установил и сообщил мне, что требуется перезагрузка. Позже, после перезагрузки, при попытке выполнить шаг wsl --set-version 2, он уходит

where.exe wsl или where.exe wsl.exe ничего не находит. Но у меня есть System32 в моем $Env:Path (это было проблемой в другом выпуске об этом здесь). где.exe calc.exe также находит calc.exe в System32.

Повторный запуск Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform просто говорит мне:

А потом все равно не работает

Выполнение поиска wsl.exe находит 8 файлов:

Текст был успешно обновлен, но возникли следующие ошибки:

Inari-Whitebear прокомментировал 19 августа 2019 г.

О, как-то я совсем пропустил это, ха-ха. Извините.

tkr789 прокомментировал 28 марта 2020 г.

Я сделал все вышеперечисленное в Windows [версия 10.0.19041.172]. Переустановил Убунту 18.04. В powershell:

wsl -l:
wsl : термин «wsl» не распознается как имя командлета, функции, файла сценария или исполняемой программы. Проверьте
написание имени или, если был указан путь, убедитесь, что путь указан правильно, и повторите попытку.

wsl --set-version 2:
At line:1 char:19
wsl --set-version 2
The ' 2:
Система не удается найти указанный файл.

Я не нашел ничего, что бы это исправило.

bulgariamitko прокомментировал 23 июля 2020 г.

Эта команда действительно решила мою проблему:

Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform

затем я перезапустил и все заработало

elena-pascal прокомментировала 10 августа 2020 г.

У меня та же проблема:

Но в командной строке:

wsl -l
Подсистема Windows для дистрибутивов Linux:
Ubuntu-20.04 (по умолчанию)
Ubuntu
Ubuntu-18.04

schiepsilon прокомментировал 21 декабря 2020 г. •

Термин "wsl" не распознается как имя командлета, функции, файла сценария или исполняемой программы.

Убедитесь, что установлен дополнительный компонент подсистемы Windows для Linux. Кроме того, если вы используете устройство ARM64 и выполняете эту команду из PowerShell, вы получите эту ошибку. Вместо этого запустите wsl.exe из PowerShell Core или командной строки.

PowerShell Core — это официальный инструмент Microsoft, как и обычный PowerShell, но он не устанавливается предварительно.Вы можете установить PowerShell Core из Microsoft Store (где он называется просто PowerShell, что сбивает с толку!) или загрузить его с GitHub. В этой статье обсуждаются различия между ними, если вам интересно.

Biswa96 прокомментировал 21 декабря 2020 г.

Для использования WSL не нужны ни Powershell, ни Powershell core, ни командная строка.

schiepsilon прокомментировал 21 декабря 2020 г.

После установки WSL можно использовать в любом установленном дистрибутиве Linux без необходимости запускать PowerShell, PowerShell Core или командную строку.

Biswa96 прокомментировал 21 декабря 2020 г.

как можно установить и использовать WSL, не используя ни один из этих трех инструментов?

Помните старые добрые времена!? Попробуйте Программу дополнительных функций, также известную как. OptionalFeatures.exe из System32. Включите функции, перезагрузите компьютер, запустите wsl.exe.

daledali прокомментировал 3 февраля 2021 г. •

Запуск: 'dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart'

Решил мою проблему. Вам нужно сначала установить wsl, чтобы он был распознан. Честно говоря, документы довольно расплывчаты, но теперь мне кажется, что это работает.

прокомментировал бандерлог 4 июня 2021 г.

PowerShell Core — это официальный инструмент Microsoft, как и обычный PowerShell, но он не устанавливается предварительно. Вы можете установить PowerShell Core из Microsoft Store (где он называется просто PowerShell, что сбивает с толку!) или загрузить его с GitHub. В этой статье обсуждаются различия между ними, если вам интересно.

Могу подтвердить, что простой запуск всего в старой доброй cmd решает проблему

прокомментировал gabrielbino 26 июня 2021 г.

Там есть проблема, которую невозможно решить! Альгуем?

Я установил подсистему Windows для Linux и включил ее в функциях Windows Turn ON OFF. А затем перезагрузил мой ПК. Я проверил cmd вскоре после перезагрузки ПК, набрав «wsl», и он работает. Но когда я запускаю свой скрипт из папки с командой "wsl -e xxx.sh", я получаю сообщение об ошибке

'wsl' не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл.

Не могли бы вы, ребята, помочь мне с этим, пожалуйста. Спасибо.

Мой компьютер работает под управлением ОС: Windows 10 Pro; Версия Microsoft Windows: 1903; Сборка ОС: 18362.418

Да попробовал сейчас, все равно не повезло. Теперь я получаю сообщение об ошибке, поскольку «wsl.exe» не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл».

Стирает ли ваш скрипт PATH? Это единственный логичный ответ, который я могу придумать. И... из CMD.EXE вам НИКОГДА не нужно добавлять ".exe".

Да, @SeñorCMasMas, я считаю, что добавлять wsl.exe не требуется. просто wsl работает нормально. В обычной командной строке, если я наберу wsl и нажму Enter, я получу окно терминала Ubuntu

<р>1. эхо %PATH% из командной строки (когда это работает) 2. эхо %PATH% где-то внутри вашего скрипта. Добавьте оператор паузы после, если вам нужно (когда это не нужно). 3. Сравните два пути. Возможно, вы найдете там ответ.

3 ответа 3

Самая распространенная причина, по которой команда, запускающая исполняемую программу, работает в командной строке, а не в пакетном сценарии, заключается в том, что в сценарии перед строкой, содержащей проблемную команду, пользователь создал переменную %дорожка%. Может показаться, что это удобное имя для переменной, которая содержит путь. Проблема в том, что это имя переменной используется Windows для хранения списка папок, разделенных точкой с запятой, в которых выполняется поиск при вызове исполняемого файла. Это системная переменная. Если вы его переопределили, то все исполняемые файлы (например, .exe, .bat, .vbs и т. д.), которые использует Windows, не будут найдены, и сценарий завершится ошибкой именно с этим сообщением, где xxx — это программа или файл, который ожидается:

'xxx' не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл.

Это может сбивать с толку, поскольку команды, которые являются внутренними по отношению к среде cmd (dir, cls, set, copy, move и т. д.) (список здесь), по-прежнему продолжают работать в этой ситуации.

Вы можете отладить сценарий, в котором это подозревается, вставив команду пути непосредственно перед строкой проблемы. Переменная пути Windows начинается с этих папок и может расширяться по мере установки программ:

Расширение Visual Studio Code Remote — WSL позволяет использовать подсистему Windows для Linux (WSL) в качестве постоянной среды разработки прямо из VS Code. Вы можете разрабатывать в среде на основе Linux, использовать наборы инструментов и утилит для Linux, а также запускать и отлаживать приложения на основе Linux, не выходя из Windows.

Расширение запускает команды и другие расширения непосредственно в WSL, поэтому вы можете редактировать файлы, расположенные в WSL или смонтированной файловой системе Windows (например, /mnt/c ), не беспокоясь о проблемах с путями, совместимости двоичных файлов или других проблемах, связанных с разными ОС.

Это позволяет VS Code обеспечивать процесс разработки локального качества, включая полный IntelliSense (дополнение), навигацию по коду и отладку, независимо от того, где размещен ваш код.

Начало работы

Примечание. Изучив этот раздел, вы можете приступить к вводному руководству по WSL.

Установка

Чтобы начать, вам необходимо:

Установите подсистему Windows для Linux вместе с предпочтительным дистрибутивом Linux.

Примечание. WSL 1 имеет некоторые известные ограничения для определенных типов разработки. Кроме того, расширения, установленные в Alpine Linux, могут не работать из-за зависимостей glibc в собственном исходном коде внутри расширения. Подробнее см. в статье Удаленная разработка и Linux.

Установите Visual Studio Code на стороне Windows (не в WSL).

Примечание. Когда во время установки будет предложено выбрать дополнительные задачи, обязательно установите флажок «Добавить в PATH», чтобы можно было легко открыть папку в WSL с помощью команды кода.

Открыть удаленную папку или рабочую область

Из терминала WSL

Открытие папки внутри подсистемы Windows для Linux в VS Code очень похоже на открытие папки Windows из командной строки или PowerShell.

Откройте окно терминала WSL (используя пункт меню «Пуск» или введя wsl из командной строки или PowerShell).

Перейдите к папке, которую вы хотите открыть в VS Code (включая, помимо прочего, монтирование файловой системы Windows, например /mnt/c )

Введите код . в терминале. Делая это в первый раз, вы должны увидеть, что VS Code извлекает компоненты, необходимые для запуска в WSL. Это займет немного времени и потребуется только один раз.

Примечание. Если эта команда не работает, вам может потребоваться перезапустить терминал или вы не добавили VS Code в свой путь при его установке.

Через мгновение появится новое окно VS Code, и вы увидите уведомление о том, что VS Code открывает папку в WSL.

VS Code теперь будет продолжать настраивать себя в WSL и держать вас в курсе по мере продвижения.

После завершения вы увидите индикатор WSL в левом нижнем углу и сможете использовать VS Code, как обычно!

Вот оно! Любые операции VS Code, которые вы выполняете в этом окне, будут выполняться в среде WSL, от редактирования и операций с файлами до отладки, использования терминалов и т. д.

Из кода VS

Кроме того, вы можете открыть окно Remote WSL непосредственно из VS Code:

  1. Запустите VS Code.
  2. Нажмите F1 , выберите Remote-WSL: новое окно для дистрибутива по умолчанию или Remote-WSL: новое окно с использованием дистрибутива для определенного дистрибутива.
  3. Используйте меню "Файл", чтобы открыть папку.

Если у вас уже открыта папка, вы также можете использовать команду Remote-WSL: повторно открыть в WSL. Вам будет предложено использовать дистрибутив.

Если вы находитесь в окне WSL и хотите открыть текущий ввод в локальном окне, используйте Remote-WSL: повторно открыть в Windows.

Из командной строки Windows

Чтобы открыть окно WSL непосредственно из командной строки Windows, используйте параметр командной строки --remote:

код --remote wsl+

например: код --remote wsl+Ubuntu /home/jim/projects/c

Нам нужно угадать, является ли входной путь файлом или папкой. Если он имеет расширение файла, он считается файлом.

Чтобы принудительно открыть папку, добавьте косую черту к пути или используйте:

code --folder-uri vscode-remote://wsl+Ubuntu/home/ubuntu/folder.with.dot

Чтобы принудительно открыть файл, добавьте --goto или используйте:

code --file-uri vscode-remote://wsl+Ubuntu/home/ubuntu/fileWithoutExtension

Работа с Git

Если вы работаете с одним и тем же репозиторием в WSL и Windows, обязательно настройте одинаковые окончания строк. Дополнительные сведения см. в советах и ​​рекомендациях.

Вы также можете избежать использования паролей, настроив WSL на использование диспетчера учетных данных Windows Git. Дополнительные сведения см. в советах и ​​рекомендациях.

Управление расширениями

VS Code запускает расширения в одном из двух мест: локально на стороне пользовательского интерфейса/клиента или в WSL. Хотя расширения, влияющие на пользовательский интерфейс VS Code, такие как темы и фрагменты, устанавливаются локально, большинство расширений будет находиться внутри WSL.

Если вы устанавливаете расширение из представления «Расширения», оно будет автоматически установлено в правильном месте. После установки вы можете сказать, где установлено расширение, на основе группировки категорий. Будет категория "Локально - Установлено" и одна для WSL.

Примечание. Если вы являетесь автором расширения и ваше расширение работает неправильно или устанавливается не в том месте, подробности см. в разделе Поддержка удаленной разработки.

Локальные расширения, которые на самом деле необходимо запускать удаленно, будут выделены серым цветом и отключены в категории «Локально — установленные». Выберите «Установить», чтобы установить расширение на удаленный хост.

Вы также можете установить все локально установленные расширения внутри WSL, перейдя в представление «Расширения» и выбрав «Установить локальные расширения в WSL: [имя]» с помощью облачной кнопки справа от строки заголовка «Локально — установлено». Появится раскрывающийся список, в котором вы можете выбрать, какие локально установленные расширения следует установить в вашем экземпляре WSL.

Открытие терминала в WSL

Открыть терминал в WSL из VS Code очень просто. После открытия папки в WSL любое окно терминала, которое вы открываете в VS Code («Терминал» > «Новый терминал»), автоматически запускается в WSL, а не локально.

Вы также можете использовать командную строку кода из этого же окна терминала для выполнения ряда операций, таких как открытие нового файла или папки в WSL. Введите код --help, чтобы узнать, какие параметры доступны в командной строке.

Отладка в WSL

Открыв папку в WSL, вы можете использовать отладчик VS Code так же, как при локальном запуске приложения. Например, если вы выберете конфигурацию запуска в файле launch.json и запустите отладку ( F5 ), приложение запустится на удаленном узле и прикрепит к нему отладчик.

Дополнительные сведения о настройке функций отладки VS Code см. в документации по отладке в файле .vscode/launch.json .

Специальные настройки WSL

Локальные пользовательские настройки VS Code также повторно используются, когда вы открываете папку в WSL. Несмотря на то, что это обеспечивает единообразие взаимодействия с пользователем, вы можете захотеть изменить некоторые из этих параметров между вашим локальным компьютером и WSL. К счастью, после подключения к WSL вы также можете установить специальные параметры WSL, запустив команду Preferences: Open Remote Settings из палитры команд ( F1 ) или выбрав вкладку Remote в редакторе настроек. Они переопределяют любые локальные настройки, которые у вас есть, когда вы открываете папку в WSL.

Дополнительно: сценарий настройки среды

При запуске VS Code Remote в WSL сценарии запуска оболочки не запускаются. Это было сделано, чтобы избежать проблем со сценариями запуска, настроенными для оболочек. Если вы хотите запустить дополнительные команды или изменить среду, это можно сделать в сценарии установки ~/.vscode-server/server-env-setup (инсайдеры: ~/.vscode-server-insiders/server-env-setup). Если он присутствует, сценарий обрабатывается перед запуском сервера.

Сценарий должен быть допустимым сценарием оболочки Bourne. Имейте в виду, что недопустимый скрипт не позволит запустить сервер. Если вы столкнулись со сценарием, который препятствует запуску сервера, вам придется использовать обычную оболочку WSL и удалить или переименовать сценарий установки.

Проверьте журнал WSL (Remote WSL: Open WSL Log) на наличие выходных данных и ошибок.

Дополнительно: открытие папки WSL 2 в контейнере

Если вы используете WSL 2 и серверную часть WSL 2 Docker Desktop, вы можете использовать расширение Remote — Containers для работы с исходным кодом, хранящимся внутри WSL! Просто выполните следующие действия:

Если вы еще этого не сделали, установите и настройте поддержку WSL 2 в Docker Desktop.

Совет. Откройте «Настройки» > «Ресурсы» > «Интеграция WSL» и включите интеграцию Docker с дистрибутивом WSL, который вы будете использовать.

Если вы еще этого не сделали, установите расширение Remote – Containers вместе с расширением WSL.

Открыв папку в WSL, выберите Remote-Containers: Reopen Folder in Container в палитре команд ( F1 ).

Если в папке нет файла .devcontainer/devcontainer.json, вам будет предложено выбрать начальную точку из фильтруемого списка или существующего файла Dockerfile или Docker Compose (если он существует).

Окно VS Code (экземпляр) перезагрузится и начнет сборку контейнера разработки. Уведомление о ходе выполнения предоставляет обновления статуса.

После завершения сборки VS Code автоматически подключится к контейнеру. Теперь вы можете работать с исходным кодом внутри контейнера.

Известные ограничения

В этом разделе содержится список наиболее распространенных проблем с WSL. Цель состоит не в том, чтобы предоставить полный список проблем, а в том, чтобы выделить некоторые из распространенных проблем, возникающих при работе с WSL.

Я вижу EACCESS: ошибка отказа в разрешении при попытке переименовать папку в открытой рабочей области в WSL 1

Чтобы избежать этой проблемы, задайте для параметра remote.WSL.fileWatcher.polling значение true. Однако просмотр файлов на основе опроса влияет на производительность больших рабочих пространств.

Для большой рабочей области вы хотите увеличить интервал опроса: remote.WSL.fileWatcher.pollingInterval и контролировать отслеживаемые папки: files.watcherExclude .

В WSL 2 нет этой проблемы с наблюдателем за файлами, на которую также не влияет новый параметр.

Голанг в WSL 1

Node.js в WSL 1

Ограничения Git

Ограничения расширения Docker

Несмотря на то, что расширение Docker можно запускать как удаленно, так и локально, если оно уже установлено локально, вы не сможете установить его на удаленном узле SSH без предварительного локального удаления. Мы решим эту проблему в будущем выпуске VS Code.

Ограничения расширения

Многие расширения будут работать в WSL без изменений. Однако в некоторых случаях некоторые функции могут потребовать изменений. Если вы столкнулись с проблемой расширения, см. здесь обзор распространенных проблем и решений, которые вы можете указать автору расширения, сообщая о проблеме.

Кроме того, некоторые расширения, установленные в WSL при использовании дистрибутива на основе Alpine Linux, могут не работать из-за зависимостей glibc в собственном коде внутри расширения. Подробнее см. в статье Удаленная разработка с Linux.

Частые вопросы

Почему меня просят изменить дистрибутив по умолчанию?

При использовании Remote-WSL: новое окно с дистрибутивом и работающим на WSL старше Windows 10 с обновлением May 2019 Update (версия 1903) вам будет предложено переключить дистрибутив по умолчанию, поскольку команда WSL может работать только с дистрибутивом по умолчанию как он еще не поддерживает параметр -d.

Вы всегда можете вручную переключить дистрибутив по умолчанию с помощью wslconfig.exe.

Вы можете посмотреть, какие дистрибутивы у вас установлены, используя:

Я вижу ошибку об отсутствующей библиотеке или зависимости

Некоторые расширения основаны на библиотеках, которых нет в обычной установке некоторых дистрибутивов WSL Linux. Вы можете добавить дополнительные библиотеки в свой дистрибутив Linux с помощью его менеджера пакетов. Для дистрибутивов на основе Ubuntu и Debian запустите sudo apt-get install

для установки необходимых библиотек. Дополнительные сведения об установке см. в документации по вашему расширению или среде выполнения.

Каковы требования к подключению для расширения Remote — WSL?

Вся остальная связь между сервером и клиентом VS Code осуществляется через случайный локальный TCP-порт. Вы можете найти список местоположений, к которым самому VS Code требуется доступ, в статье о сетевых подключениях.

Я использую прокси-сервер и у меня проблемы с подключением

Параметры прокси-сервера могут отсутствовать либо на стороне Windows, либо на стороне WSL.

Когда удаленное окно открывается из VSCode, расширение Remote — WSL пытается загрузить сервер VSCode на стороне Windows. Поэтому он использует конфигурацию прокси-сервера на стороне окна:

  • унаследовано от настроек ОС
  • как описано в разделе "Сетевые подключения в Visual Studio Code".

Когда удаленный VSCode запускается с терминала WSL, загрузка выполняется с помощью wget в дистрибутиве WSL. Настройки прокси можно настроить в:

После запуска сервера используются настройки прокси-сервера на вкладке Remote.

Можно ли принудительно запустить расширение локально или удаленно?

Расширения обычно разрабатываются и тестируются для локального или удаленного запуска, но не для обоих одновременно. Однако, если расширение поддерживает его, вы можете принудительно запустить его в определенном месте в файле settings.json.

Например, приведенный ниже параметр заставит расширение Docker запускаться локально, а расширение Debugger for Chrome — удаленно, а не по умолчанию:

Значение "ui" вместо "workspace" заставит расширение работать на стороне локального пользовательского интерфейса/клиента. Как правило, это следует использовать только для тестирования, если иное не указано в документации расширения, поскольку оно может нарушить работу расширений. Дополнительные сведения см. в статье о поддержке удаленной разработки.

Что мне нужно сделать как автору расширения?

API расширений VS Code абстрагируется от локальных и удаленных деталей, поэтому большинство расширений будут работать без изменений. Тем не менее, данные расширения могут использовать любой модуль узла или среду выполнения, которые они хотят, бывают ситуации, когда может потребоваться внести коррективы. Мы рекомендуем протестировать расширение, чтобы убедиться, что обновления не требуются. Дополнительные сведения см. в разделе Поддержка удаленной разработки.

Читайте также: