Этот ответ призван помочь другим не тратить 1-2 часа на устранение неполадок и медленный поиск разнородных решений для общих проблем при использовании WSL для терминала в VS Code. Он не охватывает установку определенных пакетов, а скорее распространенных, которые могут не устанавливаться должным образом в качестве зависимостей при установке вещей, которые действительно зависят от их присутствия, а также для исправления связанных общих настроек.
Сводка шагов
- WSL установлен
- VS Code (или другая IDE), настроенная для терминала
- Установлен NPM и исправлен путь в .profile (может помочь с другими инструментами)
- установленная сборка (помогает с любыми инструментами, использующими make / gcc / etc)
- Задачи VS Code с использованием WSL
- Дополнительно
Начало работы и требования
- У вас должен быть установлен WSL . (Это означает, что вы должны использовать 64-битную Windows 10 с соответствующими обновлениями). Следуйте инструкциям по установке, если они еще не установлены. Это потребует перезагрузки.
Конфигурация терминала VS Code
Либо сочетание клавиш CTRL+ ,, либо File
→ Preferences
→Settings
Убедитесь, что в правом верхнем углу окна редактирования вы работаете в правильном для вас контексте: либо в пользовательских настройках, либо в настройках рабочего пространства .
В строке поиска настроек введите 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
концепцию можно использовать с другими отладчиками) (кредит на этот ответ , но тот, который был перед ним, также предоставляет метод с использованием локальной петли, который может оказаться полезным)