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

87

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

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

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

Тасвин
источник

Ответы:

184

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

Сводка шагов

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

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

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

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

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

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

введите описание изображения здесь

В строке поиска настроек введите terminal.integrated.shell.windows(или любой другой вариант)

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

введите описание изображения здесь

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

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

введите описание изображения здесь

Другие IDE: IntelliJ

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

Как сделать ваш терминал WSL Ubuntu Bash функциональным для разработчиков

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

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

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

Обратите внимание, что в отличие от 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-rankin к официальной ссылке с поясняющим это жирным красным текстом) Если вы не хотите использовать редактор 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, сделайте это. Намного проще просто использовать пакет, необходимый для сборки , чем пытаться установить все отдельно.

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

sudo apt-get install -y build-essential

Выполнение задач с помощью Ubuntu

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

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

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

"runner": "terminal",

в вашем, tasks.jsonи все готово (при условии, что у вас есть все соответствующие инструменты, которые вы пытаетесь запустить, теперь они установлены в WSL Ubuntu).введите описание изображения здесь

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

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

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

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

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

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

Дополнительные полезные сведения

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

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

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

Тасвин
источник
10
Хороший ответ, также полезно предоставить уведомление Не изменяйте файлы Linux с помощью приложений и инструментов Windows новым пользователям WSL. Это может стать неожиданностью.
Дэвид С. Ранкин
1
Отличная запись, спасибо! Не уверен, что вы это видели, но есть также запись в реестре, которую вы можете сделать, чтобы предотвратить внедрение Windows PATH в Bash, что может быть проще для многих пользователей Windows, чем редактирование их вручную .profile.
Tobias J
3
@ChangQian, причина этого в том, что когда были выпущены 64-битные окна, они добавили перенаправитель файловой системы для 32-битных программ, потому что System32 был зарезервирован для 64-битных dll / программного обеспечения. Это приводит к 32-битным приложениям, которые пытаются получить доступ к System32 вместо SysWOW64 (да, похоже, наоборот). Sysnative заставляет этого не происходить, но не отображается в 64-битном программном обеспечении *, таком как Explorer. Вы можете увидеть пример этого, используя 32-битную командную строку: C:\Windows\SysWOW64\cmd.exeи работает dir C:\Windows\Sysnative * Это работает в 64-битном VSCode, потому что он закодирован для автоматического перевода
Тасвин
2
Когда вы устанавливаете свой терминал на, ubuntu.exeвы можете оказаться в папке пользователя вместо папки проекта. Вот почему вы хотите настроить свой терминал в C:\\Windows\\System32\\wsl.exeсоответствии с github.com/Microsoft/WSL/issues/2795 Use, wslconfig /setdefault Ubuntuчтобы убедиться, что запускается правильная установка.
Bernhard Döbler 09
1
Когда я писал это, это было тогда, когда WSL был гораздо более заблокирован (до выбора дистрибутива и т. Д.). У меня есть машина со свежей установкой окон, которая была обновлена, по крайней мере, до версии Spring Creator, поэтому я, наконец, вкратце рассмотрю, какие улучшения могут быть внесены в различные комментарии, и попытаюсь ответить на ваш вопрос, @Narnia.
taswyn
4

если вы хотите использовать 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",
Хён Ки Хонг
источник
Отлично работал с версией кода Visual Studio 1.32 и WSL с ubuntu. Благодарность!
Сальвадор П.