Як я використовую 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 через взаємодію між WSL та самою Windows в умови переходу, а деякі пакети, такі як Compass, виходять з ладу через не обов'язково відразу очевидні причини для того, хто не звик розробляти на Linux. Який простий спосіб створити надійне середовище терміналу WSL для VS Code, де найчастіше використовувані інструменти працюватимуть при встановленні через apt-getабо npm?

Відповіді:


184

Ця відповідь спрямована на те, щоб допомогти іншим не витрачати 1-2 години на усунення несправностей і повільно знаходити різні рішення загальних проблем при використанні WSL для терміналу в VS Code. Це не стосується встановлення конкретних пакетів, а досить загальних, які можуть неправильно встановлюватися як залежності при встановленні речей, які покладаються на їх наявність та на виправлення пов'язаних загальних налаштувань.

Короткий опис кроків

  • WSL встановлено
  • Код VS (або інший IDE), налаштований для терміналу
  • Встановлено NPM та виправлено шлях у .profile (може допомогти з іншими інструментами)
  • встановлений build-bistri (допомагає з будь-якими інструментами, що використовують make / gcc / etc)
  • Завдання коду VS з використанням WSL
  • Додаткові послуги

Початок роботи та вимоги

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

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

Або комбінація клавіш CTRL+ ,, або FilePreferencesSettings

У верхньому правому куті вікна редагування переконайтеся, що ви працюєте у правильному для вас контексті: або Параметри користувача, або Налаштування робочої області .

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

На панелі пошуку налаштувань введіть terminal.integrated.shell.windows(або будь-яке інше, що доставить вас досить довго)

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

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

На правій панелі змініть запис, створений у зміненому файлі json: замініть попереднє налаштування на

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

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

Інші середовища розробки: 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 для цього в терміналі, дивіться внизу цієї публікації, щоб дізнатися, як щоб запустити графічний інтерфейс.

В даний час за замовчуванням змінною bash PATH у 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 та встановити, може бути гарним місцем для початку.

sudo apt-get install -y build-essential

Запуск завдань за допомогою Ubuntu

Зверніть увагу, що якщо ви використовуєте VS Code's task.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 для самого терміналу, C:\\WINDOWS\\Sysnative\\bash.exeяк значення дляcommandвведіть тут опис зображення

Встановіть перший елемент argsмасиву як, -cа другий як команду, яку потрібно виконати ( зарахування до другої половини цієї відповіді ).

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

Подальші корисні біти

Хочете запустити VSCode в Windows із командного рядка WSL Bash ?

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

Хочете побудувати (див. Наведену вище частину щодо правильного налаштування завдань коду VS для 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.exeand running dir C:\Windows\Sysnative * Це працює в 64-бітному VSCode, оскільки він закодований для автоматичного перекладу
taswyn

2
Коли ви встановлюєте термінал, ubuntu.exeви можете потрапити до вашої папки користувача, а не до папки проекту. Ось чому ви хочете встановити термінал C:\\Windows\\System32\\wsl.exeвідповідно до github.com/Microsoft/WSL/issues/2795 Використовуйте, wslconfig /setdefault Ubuntuщоб переконатися, що правильно розпочато встановлення.
Bernhard Döbler

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",

Відмінно працював над версією 1,32 коду Visual Studio та WSL з ubuntu. Дякую!
Сальвадор П.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.