Как использовать Bash в Ubuntu для Windows (WSL) для моего терминала VS Code?

В то время как другие вопросы касаются использования таких вещей, как git - bash, давая новый WSL вращение, поскольку терминал для VS Code не является то же: он дает вам доступ к bash, работающему в реальной подсистеме Linux Ubuntu, вместо терминала git - bash, работающего в подсистеме Windows.

Итак, как мы получим, что он работает как терминал VS Code и, в частности, как мы получаем его работу в качестве терминала функциональной среды разработки?

В отличие от git - bash, это, к сожалению, не так просто, потому что конфигурация Ubuntu Linux в WSL может предоставить некоторые исправления, например, попытки NPM (и неудачи) запускаться из вашего каталога файлов программ Windows из-за взаимодействие между WSL и самой Windows с точки зрения путей, а также некоторые пакеты, такие как Compass, для которых не всегда очевидны причины для тех, кто не используется для разработки в Linux. Какой простой способ иметь надежную среду WSL-терминала для VS-кода, где наиболее часто используемые инструменты будут запускаться при установке через apt-get или npm?

Ответы

Ответ 1

Этот ответ призван помочь другим избежать затрат на устранение неполадок в течение 1-2 часов и медленного поиска разрозненных решений для распространенных проблем при использовании WSL для терминала в VS Code. Он не охватывает установку определенных пакетов, а скорее общие, которые могут неправильно устанавливаться как зависимости при установке вещей, которые зависят от их присутствия, и от исправления связанных общих настроек.

Краткое изложение шагов

  • WSL установлен
  • Код VS (или другая IDE), настроенный для терминала
  • NPM установлен и путь исправлен в .profile (может помочь с другими инструментами)
  • build-essential установлен (помогает с любыми инструментами, использующими make/gcc/etc)
  • VS Code Tasks с использованием WSL
  • Дополнительно

Начало работы и требования

  • У вас должен быть установлен WSL. (Это означает, что вы должны работать под управлением 64-битной Windows 10 с соответствующими обновлениями) Следуйте инструкциям по установке, если они еще не установлены. Это потребует некоторых перезагрузок.

Конфигурация терминала с кодом VS

Либо сочетание клавиш CTRL + ,, либо FilePreferences Settings

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

enter image description here

В строке поиска настроек введите terminal.integrated.shell.windows (или что-то еще, что вас продлит достаточно долго)

Найдите настройку в файле фактических настроек, используйте " Edit (наведите курсор мыши на строку, она будет слева: на сенсорном экране без мыши вы сможете просто нажать слева от строки) и выберите " Replace in Settings

enter image description here

На правой панели измените запись, созданную в измененном файле json: замените предыдущий параметр на

"C:\\WINDOWS\\Sysnative\\bash.exe"

enter image description here

Другие IDE: IntelliJ

Откройте "Настройки"/"Инструменты"/"Терминал" и установите в поле "Путь к оболочке" значение "C:\Users\USERNAME\AppData\Local\Microsoft\WindowsApps\ubuntu.exe"

Сделайте ваш WSL Ubuntu Bash Terminal функциональным для dev

Когда вы используете CTRL + ', чтобы открыть терминал, теперь у вас должен быть терминал bash.

Если вы запускаете bash.exe впервые, вас могут спросить об установке Ubuntu. Сделай так. После завершения установки выберите имя пользователя и пароль для использования в WSL Ubuntu. Они не должны совпадать с вашей текущей учетной записью Windows, и важно отметить, что они не изменятся в зависимости от изменений пароля вашей учетной записи Windows.

Как только вы закончите, у вас будет командная строка bash в вашем терминале. enter image description here

Обратите внимание, что в отличие от git-bash в Windows, это отдельная среда. Хотя его можно использовать для запуска программного обеспечения Windows вне его, вам потребуются соответствующие пакеты Ubuntu для запуска их в реальном терминале.

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

Обновления и git

Примечание: я собираюсь задокументировать это как sudo для людей, которым просто нужны отдельные части этого, но один вариант с самого начала - вместо этого sudo su и просто выполнить следующие команды без sudo.

Убедитесь, что ваши пакеты Ubuntu обновлены:

sudo apt-get -y update
sudo apt-get -y upgrade
sudo apt-get -y dist-upgrade
sudo apt autoremove

Установите git:

sudo apt-get install git

Node.js & NPM

Если у вас уже есть Node или NPM, загруженные в Windows, запуск их в Ubuntu может стать проблематичным из-за проблем с путями. Итак, вам нужно установить собственные версии Ubuntu и убедиться, что они используются вместо них.

Сначала установите node.js с помощью NPM. (альтернатива: установите NVM и используйте его для установки node.js)

После установки запуск команд npm, вероятно, завершится неудачей: например, npm -v, вероятно, даст вам:

: not foundram Files/nodejs/npm: 3: /mnt/c/Program Files/nodejs/npm:
: not foundram Files/nodejs/npm: 5: /mnt/c/Program Files/nodejs/npm:
/mnt/c/Program Files/nodejs/npm: 6: /mnt/c/Program Files/nodejs/npm: Syntax error: word unexpected (expecting "in")

Это связано с проблемой с довольно простым решением. Используя ваш любимый редактор CLI (например, nano, vim, emacs, cat и sed … и т.д.), Откройте ~/.profile

nano ~/.profile

Примечание: НЕ пытайтесь редактировать файлы Linux с помощью инструментов Windows. (Спасибо @david -c -ранкин комментарий за официальную ссылку с жирным красным текстом, объясняющим это) Если вы не хотите использовать редактор CLI для этого в терминале, см. В нижней части этого поста ссылку на как получить графический интерфейс один работает.

В настоящее время переменной PATH bash по умолчанию в WSL является

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

Который вводит путь Windows после первых двух двоичных каталогов. К сожалению, это не приводит к тому, что /usr/bin используется до того, как Windows установит npm, поэтому добавьте это до финального $ PATH:

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

Сохраните, а затем либо перезагрузите терминал, либо просто загрузите файл пути

source ~/.profile

Встроенный существенно

Если вы используете что-то, что требует компиляции или иным образом использует make, это почти гарантирует, что вам понадобятся эти установленные; поэтому, если вы не установили их при установке node.js, сделайте это. Гораздо проще просто использовать пакет build-essential, а не пытаться устанавливать все по отдельности.

Обратите внимание, что такие пакеты, как Compass, которые используют Ruby FFI, не смогут работать без них. Если у вас возникли проблемы с правильной установкой и запуском инструмента, хорошим началом может быть то, что вы установили gcc и make.

sudo apt-get install -y build-essential

Запуск задач с использованием Ubuntu

Обратите внимание, что если вы используете VS Code tasks.json для запуска задач сборки, по умолчанию он будет по-прежнему запускаться с использованием подсистемы Windows вместо Ubuntu. Иногда это может быть тем, что вы хотите, но если вы только что закончили установку grunt -c li в Ubuntu, а не в Windows, это, вероятно, не так.

Недавно VS Code получил майское обновление 2017 года о том, как работают Задачи, что позволяет ему назначать исполнитель задач в качестве терминала. Это, безусловно, самый простой способ перенести задачи.

Просто установить

"runner": "terminal",

в вашем tasks.json и все готово (при условии, что у вас есть все соответствующие инструменты, которые вы пытаетесь запустить сейчас, установленные в WSL Ubuntu). enter image description here

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

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

Старый метод способен вызывать оболочку WSL Ubunutu Bash и отображать ее в OUTPUT, и включает в себя либо вызов bash.exe с аргументом -c, либо использование сценария оболочки. К сожалению, это не так семантически, так как мы делаем bash нашей командой и передаём то, что хотим вместо этого использовать в качестве аргумента. Это также означает, что он не так быстро переносится на другие системы.

В качестве значения для command enter image description here вы можете использовать то же местоположение, которое вы C:\\WINDOWS\\Sysnative\\bash.exe ранее для кода VS для самого терминала, C:\\WINDOWS\\Sysnative\\bash.exe

Установите первый элемент массива args как -c а второй - как команду, которую вы хотите выполнить (благодарность за вторую половину этого ответа).

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

Дополнительные полезные биты

Хотите запустить VSCode в Windows из командной строки WSL Bash?

Хотите иметь графический интерфейс для вашей WSL Ubuntu? (это позволит вам использовать такие вещи, как использование графического редактора Linux для файлов в самой системе Ubuntu: не редактируйте их с помощью инструментов редактирования Windows, см. комментарии/примечания в разделе на npm)

Хотите собрать (см. Выше часть о правильной настройке задач VS Code для WSL) и полностью отлаживать в WSL Ubuntu? (это показывает, как это сделать с помощью gdb, но концепция pipeTransport может использоваться с другими отладчиками) (благодарность этому ответу, но pipeTransport также предоставляет метод с использованием локальной обратной связи, который может оказаться полезным)

Ответ 2

если вы хотите использовать zsh, найдите путь ubuntu1804.exe или ubuntu1604.exe.

в моем случае

"terminal.external.windowsExec": "C:\\Users\\asdf\\AppData\\Local\\Microsoft\\WindowsApps\\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\\ubuntu1804.exe",
"terminal.integrated.shell.windows": "C:\\Users\\asdf\\AppData\\Local\\Microsoft\\WindowsApps\\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\\ubuntu1804.exe",