Bagaimana cara menggunakan Bash di Ubuntu pada Windows (WSL) untuk terminal VS Code saya?

88

Sementara pertanyaan lain berhubungan dengan bagaimana menggunakan hal-hal seperti git-bash , memberikan putaran WSL baru sebagai terminal untuk VS Code tidaklah sama: ini memberi Anda akses ke bash yang berjalan pada subsistem Linux Ubuntu yang sebenarnya, daripada git- terminal bash yang berjalan di subsistem Windows.

Jadi bagaimana kita membuatnya bekerja sebagai terminal VS Code, dan khususnya bagaimana kita membuatnya bekerja sebagai terminal lingkungan dev fungsional?

Tidak seperti git-bash, ini sayangnya tidak sesederhana itu, karena konfigurasi Linux Ubuntu di WSL dapat menyediakan beberapa masalah, seperti NPM mencoba (dan gagal) untuk dijalankan dari direktori Windows Program Files karena interaksi antara WSL dan Windows itu sendiri di pathing, dan beberapa paket seperti Compass gagal karena apa yang belum tentu menjadi alasan yang jelas bagi seseorang yang tidak terbiasa mengembangkan di Linux. Apa cara sederhana untuk memiliki lingkungan terminal WSL yang andal untuk VS Code di mana alat yang paling sering digunakan akan berjalan ketika diinstal melalui apt-getatau npm?

taswyn.dll
sumber

Jawaban:

185

Jawaban ini berusaha untuk membantu orang lain menghindari menghabiskan 1-2 jam untuk memecahkan masalah dan perlahan menemukan solusi yang berbeda untuk masalah umum saat menggunakan WSL untuk terminal di VS Code. Ini tidak mencakup penginstalan paket tertentu, melainkan yang umum yang mungkin tidak diinstal dengan benar sebagai dependensi saat menginstal hal-hal yang bergantung pada keberadaannya, dan untuk memperbaiki pengaturan umum terkait.

Ringkasan langkah-langkah

  • WSL diinstal
  • VS Code (atau IDE lain) dikonfigurasi untuk terminal
  • NPM diinstal & perbaikan jalur di .profile (dapat membantu dengan alat lain)
  • build-essential diinstal (membantu alat apa pun yang menggunakan make / gcc / etc)
  • VS Code Tasks menggunakan WSL
  • Ekstra

Memulai & Persyaratan

  • Anda harus menginstal WSL . (Artinya Anda harus menjalankan Windows 10 64 bit , dengan pembaruan yang sesuai) Ikuti panduan penginstalan jika belum diinstal. Ini akan membutuhkan beberapa reboot.

Konfigurasi Terminal VS Code

Baik pintasan CTRL+ ,keyboard, atau FilePreferencesSettings

Di kanan atas jendela pengeditan, pastikan Anda bekerja dalam konteks yang benar untuk Anda: Pengaturan Pengguna atau Pengaturan Ruang Kerja .

masukkan deskripsi gambar di sini

Di bilah pencarian pengaturan, ketik terminal.integrated.shell.windows(atau apa pun yang membuat Anda cukup lama)

Temukan pengaturan di file pengaturan aktual, gunakan Edit(mouse di atas garis, itu akan berada di sebelah kiri: pada layar sentuh tanpa mouse, Anda harus cukup mengetuk di sebelah kiri baris), dan pilihReplace in Settings

masukkan deskripsi gambar di sini

Di panel kanan, ubah entri yang dibuat di file json yang dimodifikasi: ganti pengaturan sebelumnya dengan

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

masukkan deskripsi gambar di sini

IDE lainnya: IntelliJ

Buka Pengaturan / Alat / Terminal dan setel bidang "Jalur shell" ke "C:\Users\USERNAME\AppData\Local\Microsoft\WindowsApps\ubuntu.exe"

Menjadikan Terminal Bash Ubuntu WSL Anda berfungsi untuk dev

Saat Anda menggunakan CTRL+ `untuk membuka terminal, Anda sekarang harus memiliki terminal bash.

Jika ini adalah pertama kalinya Anda menjalankan bash.exe, Anda mungkin ditanya tentang menginstal Ubuntu. Lakukan. Setelah instalasi Anda selesai, pilih nama pengguna dan kata sandi Anda untuk digunakan di WSL Ubuntu. Ini tidak harus sesuai dengan akun Windows Anda saat ini, dan penting untuk diperhatikan bahwa mereka tidak akan berubah berdasarkan perubahan pada kata sandi akun Windows Anda.

Setelah Anda selesai, Anda akan memiliki prompt perintah bash di terminal Anda.masukkan deskripsi gambar di sini

Perhatikan bahwa tidak seperti git-bash di Windows, ini adalah lingkungan yang terpisah. Meskipun dapat digunakan untuk meluncurkan perangkat lunak Windows di luar dirinya sendiri, Anda memerlukan paket Ubuntu yang sesuai untuk menjalankannya di dalam terminal sebenarnya.

Saat ini, WSL tidak dimuat dengan semua yang Anda harapkan atau biasa Anda miliki, dan beberapa hal dapat bertentangan dengan perangkat lunak yang Anda muat di Windows, berdasarkan pengaturan profil default.

Pembaruan & git

Catatan: Saya akan mendokumentasikan ini sebagai sudo untuk orang-orang yang hanya membutuhkan satu bagian saja, tetapi salah satu opsi pada awalnya adalah dengan sudo sumenjalankan perintah berikut tanpa sudo.

Pastikan paket Ubuntu Anda sudah yang terbaru:

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

Instal git:

sudo apt-get install git

Node.js & NPM

Jika Anda sudah memuat Node atau NPM di Windows, menjalankannya di Ubuntu dapat menimbulkan masalah karena masalah jalur. Jadi, Anda perlu menginstal versi asli Ubuntu dan memastikan bahwa versi tersebut digunakan.

Pertama, instal node.js dengan NPM . (alternatif: instal NVM dan gunakan untuk menginstal node.js)

Setelah menginstal, menjalankan perintah npm mungkin akan gagal: misalnya, npm -vmungkin akan memberi Anda:

: 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")

Ini karena masalah jalur dengan solusi yang cukup mudah . Menggunakan editor CLI favorit Anda (seperti nano, vim, emacs, catdan sed... dll), membuka Anda~/.profile

nano ~/.profile

Catatan: JANGAN mencoba mengedit file Linux menggunakan alat Windows . (Terima kasih untuk komentar @ david-c-rankin untuk tautan resmi dengan teks merah tebal yang menjelaskan hal ini) Jika Anda tidak ingin menggunakan editor CLI untuk ini di terminal, lihat bagian bawah posting ini untuk tautan tentang caranya untuk menjalankan GUI.

Saat ini, variabel PATH bash default di WSL adalah

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

Yang menginjeksi jalur windows setelah dua direktori biner pertama. Sayangnya, ini tidak mengakibatkan / usr / bin digunakan sebelum windows menginstal npm, jadi tambahkan sebelum $ PATH terakhir:

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

Simpan, lalu muat ulang terminal atau cukup ambil file jalurnya

source ~/.profile

Build-essential

Jika Anda menggunakan apa pun yang memerlukan kompilasi atau penggunaan make, hampir dapat dipastikan bahwa Anda memerlukannya untuk diinstal; jadi jika Anda tidak menginstalnya saat menginstal node.js, lakukanlah. Jauh lebih mudah menggunakan paket build-essential daripada mencoba menginstal semuanya secara terpisah.

Perhatikan bahwa paket seperti Kompas yang mengandalkan Ruby FFI akan gagal tanpa ini. Jika Anda mengalami masalah saat menginstal dan menjalankan alat dengan benar, pastikan Anda memiliki gcc dan membuat penginstalan dapat menjadi tempat yang baik untuk memulai.

sudo apt-get install -y build-essential

Menjalankan Tugas menggunakan Ubuntu

Perhatikan bahwa jika Anda menggunakan task.json VS Code untuk menjalankan tugas build, secara default masih akan menjalankannya menggunakan subsistem Windows, bukan Ubuntu. Terkadang ini mungkin yang Anda inginkan, tetapi jika Anda baru saja selesai menginstal grunt-cli di Ubuntu dan bukan Windows, mungkin juga tidak.

VS Code baru-baru ini memiliki update Mei 2017 tentang cara kerja Tasks yang memungkinkannya untuk mengatur pelari tugas sebagai terminal . Sejauh ini, ini adalah cara termudah untuk memindahkan tugas.

Cukup atur

"runner": "terminal",

di Anda tasks.jsondan Anda selesai (dengan asumsi Anda memiliki semua alat yang sesuai yang Anda coba jalankan sekarang diinstal di WSL Ubuntu).masukkan deskripsi gambar di sini

Ini sangat portabel, idealnya tidak memerlukan perubahan antara sistem yang memiliki WSL atau tidak, atau ke OS lain, dan merupakan metode yang saya rekomendasikan.

Saat ini, metode ini memunculkan TERMINALinstance tab lain (diakses dari drop down). Anda masih dapat mengatur pengamat yang sesuai, tetapi itu berarti tidak lagi ada di OUTPUTtab.

Metode lama mampu memanggil shell WSL Ubunutu Bash dan menampilkannya OUTPUT, dan melibatkan pemanggilan bash.exe dengan argumen -c atau menggunakan skrip shell. Sayangnya ini tidak semantik, karena kita membuat bashperintah kita dan meneruskannya apa yang ingin kita jalankan sebagai argumen. Ini juga berarti tidak dapat dibawa dengan cepat ke sistem lain.

Anda dapat menggunakan lokasi yang sama dengan yang Anda berikan pada Kode VS sebelumnya untuk terminal itu sendiri, C:\\WINDOWS\\Sysnative\\bash.exesebagai nilainyacommandmasukkan deskripsi gambar di sini

Tetapkan elemen pertama dari argsarray sebagai -cdan yang kedua sebagai perintah yang ingin Anda jalankan ( kreditkan ke paruh kedua jawaban ini ).

Sebagai alternatif, Anda dapat menjalankan skrip shell seperti yang terlihat di sini .

Bit bermanfaat lebih lanjut

Ingin memulai VSCode di Windows dari baris perintah WSL Bash ?

Ingin memiliki antarmuka grafis untuk WSL Ubuntu Anda ? (ini akan memungkinkan Anda melakukan hal-hal seperti menggunakan editor GUI Linux untuk file dalam sistem Ubuntu itu sendiri: jangan mengeditnya menggunakan alat pengeditan Windows, lihat komentar / catatan di bagian npm)

Ingin membangun (lihat bagian di atas tentang menyiapkan VS Code Tasks dengan benar untuk WSL) dan melakukan debug sepenuhnya dalam WSL Ubuntu ? (ini menunjukkan bagaimana melakukannya menggunakan gdb, tetapi pipeTransportkonsepnya dapat digunakan dengan debugger lain) (kredit untuk jawaban ini , tapi yang sebelumnya juga menyediakan metode menggunakan loopback lokal yang terbukti berguna)

taswyn.dll
sumber
10
Jawaban yang bagus, juga berguna untuk memberikan pemberitahuan Jangan ubah file Linux menggunakan aplikasi dan alat Windows untuk pengguna baru WSL. Ini bisa sangat mengejutkan.
David C. Rankin
1
Tulisan yang bagus, terima kasih! Tidak yakin apakah Anda pernah melihat ini, tetapi ada juga entri registri yang dapat Anda buat untuk mencegah PATH Windows disuntikkan ke Bash, yang mungkin lebih mudah bagi banyak pengguna Windows daripada mengeditnya secara manual .profile.
Tobias J
3
@ChangQian alasan untuk ini adalah ketika jendela 64 bit dirilis, mereka menambahkan pengalih sistem file untuk program 32 bit, karena System32 dicadangkan untuk 64 bit dll / perangkat lunak. Ini menghasilkan aplikasi 32 bit yang mencoba mengakses System32 alih-alih mengakses SysWOW64 (ya sepertinya mundur). Sysnative memaksa hal ini tidak terjadi, tetapi tidak muncul di perangkat lunak 64 bit * seperti Explorer. Anda dapat melihat contohnya menggunakan command prompt 32 bit: C:\Windows\SysWOW64\cmd.exedan menjalankan dir C:\Windows\Sysnative * Ini berfungsi dalam VSCode 64bit karena dikodekan untuk menerjemahkannya secara otomatis
taswyn
2
Ketika Anda mengatur terminal ubuntu.exeAnda ke Anda mungkin berakhir di folder pengguna Anda dan bukan folder proyek. Itulah mengapa Anda ingin menyetel terminal Anda C:\\Windows\\System32\\wsl.exesesuai dengan github.com/Microsoft/WSL/issues/2795 Gunakan wslconfig /setdefault Ubuntuuntuk memastikan penginstalan yang benar dimulai.
Bernhard Döbler
1
Ketika saya menulis ini, itu adalah ketika WSL jauh lebih terkunci (sebelum pilihan distro / dll). Saya memiliki mesin dengan penginstalan windows baru yang telah diupdate setidaknya ke edisi Spring Creator, jadi saya akhirnya akan segera melihat secara nyata peningkatan apa yang dapat dilakukan untuk berbagai komentar dan mencoba menjawab pertanyaan Anda, @Narnia.
taswyn
4

jika Anda ingin menggunakan zsh, cari path ubuntu1804.exe atau ubuntu1604.exe.

dalam hal ini

"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",
Hyeon ki Hong
sumber
Bekerja dengan baik pada versi 1,32 dari kode studio visual dan WSL dengan ubuntu. Terima kasih!
Salvador P.