Làm cách nào để sử dụng Bash trên Ubuntu trên Windows (WSL) cho thiết bị đầu cuối Mã VS của tôi?


87

Trong khi các câu hỏi khác liên quan đến cách sử dụng những thứ như git-bash , thì việc cung cấp cho WSL mới làm thiết bị đầu cuối cho VS Code không giống như vậy: nó cho phép bạn truy cập vào bash chạy trên hệ thống con Ubuntu Linux thực tế, thay vì git- bash terminal chạy trên hệ thống con của Windows.

Vì vậy, làm thế nào để chúng ta làm cho nó hoạt động như một thiết bị đầu cuối Mã VS, và đặc biệt là làm thế nào để làm cho nó hoạt động như một thiết bị đầu cuối môi trường dev chức năng?

Không giống như git-bash, điều này rất tiếc là không đơn giản, vì cấu hình Ubuntu Linux trong WSL có thể cung cấp một số lỗi, chẳng hạn như NPM cố gắng (và không thành công) chạy từ thư mục Windows Program Files của bạn do sự tương tác giữa WSL và chính Windows trong điều khoản vỗ nhẹ, và một số gói như La bàn bị lỗi không phải là lý do rõ ràng ngay lập tức đối với những người không quen phát triển trên Linux. Cách đơn giản để có một môi trường đầu cuối WSL đáng tin cậy cho VS Code nơi các công cụ được sử dụng thường xuyên nhất sẽ chạy khi được cài đặt qua apt-gethoặc npm?

Câu trả lời:


184

Câu trả lời này nhằm giúp những người khác tránh mất 1-2 giờ để khắc phục sự cố và từ từ tìm ra các giải pháp khác nhau cho các sự cố thường gặp khi sử dụng WSL cho thiết bị đầu cuối trong VS Code. Nó không đề cập đến việc cài đặt các gói cụ thể, mà là các gói phổ biến có thể không cài đặt đúng cách như các gói phụ thuộc khi cài đặt những thứ phụ thuộc vào sự hiện diện của chúng và sửa các cài đặt chung liên quan.

Tóm tắt các bước

  • WSL đã được cài đặt
  • Mã VS (hoặc IDE khác) được định cấu hình cho thiết bị đầu cuối
  • NPM đã cài đặt & sửa đường dẫn trong .profile (có thể trợ giúp với các công cụ khác)
  • build-Essential được cài đặt (trợ giúp với bất kỳ công cụ nào sử dụng make / gcc / etc)
  • VS Code Tasks sử dụng WSL
  • Bổ sung

Bắt đầu & Yêu cầu

  • Bạn phải cài đặt WSL . (Có nghĩa là bạn phải chạy Windows 10 64 bit , với các bản cập nhật thích hợp) Làm theo hướng dẫn cài đặt nếu chưa được cài đặt. Điều này sẽ yêu cầu một số khởi động lại.

Cấu hình đầu cuối mã VS

Hoặc phím tắt CTRL+ ,hoặc FilePreferencesSettings

Ở trên cùng bên phải của cửa sổ chỉnh sửa, hãy đảm bảo rằng bạn đang làm việc trong ngữ cảnh phù hợp với mình: Cài đặt người dùng hoặc Cài đặt không gian làm việc .

nhập mô tả hình ảnh ở đây

Trong thanh tìm kiếm cài đặt, hãy nhập terminal.integrated.shell.windows(hoặc bất cứ thứ gì khiến bạn đủ lâu)

Tìm cài đặt trong tệp cài đặt thực tế, sử dụng Edit(di chuột qua dòng, nó sẽ ở bên trái: trên màn hình cảm ứng không có chuột, bạn có thể chỉ cần chạm vào bên trái của dòng) và chọnReplace in Settings

nhập mô tả hình ảnh ở đây

Trong ngăn bên phải, sửa đổi mục nhập được tạo trong tệp json đã sửa đổi: thay thế cài đặt trước đó bằng

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

nhập mô tả hình ảnh ở đây

Các IDE khác: IntelliJ

Mở Settings / Tools / Terminal và đặt trường "Shell path" thành "C:\Users\USERNAME\AppData\Local\Microsoft\WindowsApps\ubuntu.exe"

Làm cho WSL Ubuntu Bash Terminal của bạn hoạt động cho nhà phát triển

Khi bạn sử dụng CTRL+ `để mở thiết bị đầu cuối, bây giờ bạn sẽ có một thiết bị đầu cuối bash.

Nếu đây là lần đầu tiên bạn chạy bash.exe, bạn có thể được hỏi về cách cài đặt Ubuntu. Làm vậy. Sau khi cài đặt xong, hãy chọn tên người dùng và mật khẩu của bạn để sử dụng trong WSL Ubuntu. Những điều này không nhất thiết phải trùng với tài khoản Windows hiện tại của bạn và điều quan trọng cần lưu ý là chúng sẽ không thay đổi dựa trên những thay đổi đối với mật khẩu tài khoản Windows của bạn.

Sau khi hoàn tất, bạn sẽ có một dấu nhắc lệnh bash trong thiết bị đầu cuối của mình.nhập mô tả hình ảnh ở đây

Lưu ý rằng không giống như git-bash trên Windows, đây là một môi trường riêng biệt. Mặc dù nó có thể được sử dụng để khởi chạy phần mềm Windows bên ngoài chính nó, bạn sẽ cần các gói Ubuntu thích hợp để chạy chúng trong thiết bị đầu cuối thực tế.

Hiện tại, WSL không được tải với mọi thứ bạn có thể mong đợi hoặc đã quen với việc có và một số thứ có thể xung đột với phần mềm bạn đã tải trong Windows, dựa trên cài đặt cấu hình mặc định.

Cập nhật & git

Lưu ý: Tôi sẽ ghi lại những điều này dưới dạng sudo cho những người đơn giản chỉ cần các phần đơn lẻ của điều này, nhưng một tùy chọn khi bắt đầu là thay vào đó sudo suvà chỉ cần chạy các lệnh sau mà không cần sudo.

Đảm bảo rằng các gói Ubuntu của bạn được cập nhật:

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

Cài đặt git:

sudo apt-get install git

Node.js & NPM

Nếu bạn đã tải Node hoặc NPM trong Windows, việc chạy chúng trong Ubuntu có thể gặp sự cố do sự cố đường dẫn. Vì vậy, bạn cần cài đặt phiên bản gốc Ubuntu và đảm bảo rằng chúng được sử dụng thay thế.

Đầu tiên, cài đặt node.js bằng NPM . (thay thế: cài đặt NVM và sử dụng nó để cài đặt node.js)

Sau khi cài đặt, chạy các lệnh npm có thể sẽ không thành công: ví dụ: npm -vcó thể sẽ cung cấp cho bạn:

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

Điều này là do một vấn đề liên quan đến một giải pháp khá đơn giản . Sử dụng trình soạn CLI yêu thích của bạn (ví dụ như nano, vim, emacs, catsed... vv), mở của bạn~/.profile

nano ~/.profile

Lưu ý: KHÔNG cố gắng chỉnh sửa tệp Linux bằng các công cụ của Windows . (Cảm ơn nhận xét của @ david-c-rankin về liên kết chính thức với dòng chữ màu đỏ đậm giải thích điều này) Nếu bạn không muốn sử dụng trình chỉnh sửa CLI cho điều này trong thiết bị đầu cuối, hãy xem phần cuối của bài đăng này để biết liên kết về cách để chạy GUI.

Hiện tại, biến PATH bash mặc định trong WSL là

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

Đó là chèn đường dẫn cửa sổ sau hai thư mục nhị phân đầu tiên. Thật không may, điều này không dẫn đến việc / usr / bin được sử dụng trước khi các cửa sổ được cài đặt npm, vì vậy hãy thêm nó vào trước $ PATH cuối cùng:

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

Lưu ra, sau đó tải lại thiết bị đầu cuối hoặc chỉ nguồn tệp đường dẫn

source ~/.profile

Xây dựng-thiết yếu

Nếu bạn đang sử dụng bất kỳ thứ gì yêu cầu biên dịch hoặc sử dụng make, gần như đảm bảo rằng bạn sẽ cần cài đặt những thứ này; vì vậy nếu bạn không cài đặt chúng trong khi cài đặt node.js, hãy làm như vậy. Sẽ dễ dàng hơn nhiều nếu chỉ đơn giản sử dụng gói xây dựng thiết yếu hơn là cố gắng cài đặt mọi thứ riêng lẻ.

Lưu ý rằng các gói như La bàn dựa trên Ruby FFI sẽ không thành công nếu không có các gói này. Nếu bạn gặp sự cố khi cài đặt và chạy một công cụ đúng cách, hãy đảm bảo rằng bạn đã cài đặt gcc and make có thể là một nơi tốt để bắt đầu.

sudo apt-get install -y build-essential

Chạy công việc bằng Ubuntu

Lưu ý rằng nếu bạn sử dụng các task.json của VS Code để chạy các tác vụ xây dựng, thì theo mặc định, nó sẽ vẫn chạy chúng bằng hệ thống con Windows thay vì hệ thống Ubuntu. Đôi khi đây có thể là những gì bạn muốn, nhưng nếu bạn vừa hoàn tất cài đặt grunt-cli trong Ubuntu chứ không phải Windows, thì có lẽ là không.

VS Code gần đây đã có bản cập nhật tháng 5 năm 2017 về cách Tasks hoạt động cho phép nó đặt trình chạy tác vụ làm thiết bị đầu cuối . Đây là cách dễ nhất để di chuyển các nhiệm vụ.

Đơn giản chỉ cần đặt

"runner": "terminal",

trong của bạn tasks.jsonvà bạn đã hoàn tất (giả sử bạn có tất cả các công cụ thích hợp mà bạn đang cố gắng chạy hiện đã được cài đặt trong WSL Ubuntu).nhập mô tả hình ảnh ở đây

Điều này rất dễ di chuyển, lý tưởng là không yêu cầu thay đổi giữa các hệ thống có hoặc không có WSL hoặc với các hệ điều hành khác, và là phương pháp tôi muốn đề xuất.

Hiện tại, phương thức này sinh ra một TERMINALphiên bản tab khác (được truy cập từ trình đơn thả xuống). Bạn vẫn có thể thiết lập những người theo dõi thích hợp, nhưng điều đó có nghĩa là nó không còn nằm trên OUTPUTtab nữa.

Phương thức cũ có khả năng gọi shell WSL Ubunutu Bash và hiển thị nó OUTPUT, đồng thời liên quan đến việc gọi bash.exe với đối số -c hoặc sử dụng tập lệnh shell. Thật không may, nó không đúng ngữ nghĩa, vì chúng ta đang thực hiện bashlệnh của mình và chuyển nó những gì chúng ta muốn chạy dưới dạng đối số. Điều này cũng có nghĩa là nó không nhanh chóng di động đến các hệ thống khác.

Bạn có thể sử dụng cùng một vị trí mà bạn đã cung cấp Mã VS trước đó cho chính thiết bị đầu cuối, C:\\WINDOWS\\Sysnative\\bash.exelàm giá trị chocommandnhập mô tả hình ảnh ở đây

Đặt phần tử đầu tiên của argsmảng là -cvà phần tử thứ hai làm lệnh bạn muốn chạy ( ghi có vào nửa sau của câu trả lời này ).

Ngoài ra, bạn có thể chạy một tập lệnh shell như đã thấy ở đây .

Các thông tin hữu ích khác

Bạn muốn khởi động VSCode trong Windows từ dòng lệnh WSL Bash ?

Bạn muốn có giao diện đồ họa cho WSL Ubuntu của mình ? (điều này sẽ cho phép bạn thực hiện những việc như sử dụng trình chỉnh sửa GUI Linux cho các tệp trong chính hệ thống Ubuntu: không chỉnh sửa chúng bằng các công cụ chỉnh sửa Windows, xem nhận xét / ghi chú trong phần trên npm)

Bạn muốn xây dựng (xem phần trên về cách thiết lập VS Code Tasks đúng cách cho WSL) và gỡ lỗi hoàn toàn trong WSL Ubuntu ? (điều này cho thấy cách làm như vậy bằng cách sử dụng gdb, nhưng pipeTransportkhái niệm này có thể được sử dụng với các trình gỡ lỗi khác) (tín dụng cho câu trả lời này , nhưng câu trả lời trước nó cũng cung cấp một phương thức sử dụng vòng lặp cục bộ có thể tỏ ra hữu ích)


10
Câu trả lời hay, cũng hữu ích khi cung cấp thông báo Không thay đổi tệp Linux bằng các ứng dụng và công cụ Windows cho người dùng WSL mới. Điều này có thể gây bất ngờ.
David C. Rankin

1
Viết tốt, cảm ơn! Không chắc bạn đã thấy điều này chưa, nhưng cũng có một mục đăng ký mà bạn có thể thực hiện để ngăn Windows PATH được đưa vào Bash, điều này có thể dễ dàng hơn cho nhiều người dùng Windows so với việc chỉnh sửa thủ công của họ .profile.
Tobias J

3
@ChangQian lý do cho điều này là khi cửa sổ 64 bit được phát hành, họ đã thêm trình chuyển hướng hệ thống tệp cho các chương trình 32 bit, vì System32 được dành riêng cho dlls / phần mềm 64 bit. Điều này dẫn đến các ứng dụng 32 bit cố gắng truy cập System32 thay vì truy cập SysWOW64 (vâng, nó có vẻ ngược). Sysnative buộc điều này không xảy ra, nhưng không hiển thị trong phần mềm 64 bit * như Explorer. Bạn có thể xem một ví dụ của việc này bằng cách sử dụng lệnh 32 bit dấu nhắc: C:\Windows\SysWOW64\cmd.exevà chạy dir C:\Windows\Sysnative * công trình trong 64bit VSCode này bởi vì nó được mã hoá để dịch nó tự động
taswyn

2
Khi bạn đặt thiết bị đầu cuối của mình thành, ubuntu.exebạn có thể kết thúc trong thư mục người dùng thay vì thư mục của dự án. Đó là lý do tại sao bạn muốn đặt thiết bị đầu cuối của mình C:\\Windows\\System32\\wsl.exetheo github.com/Microsoft/WSL/issues/2795 Sử dụng wslconfig /setdefault Ubuntuđể đảm bảo cài đặt phù hợp bắt đầu.
Bernhard Döbler,

1
Khi tôi viết điều này là khi WSL bị khóa nhiều hơn (trước sự lựa chọn phân phối / v.v.). Tôi có một chiếc máy với bản cài đặt mới của cửa sổ đã được cập nhật ít nhất lên phiên bản Spring Creator, vì vậy cuối cùng tôi sẽ sớm xem xét thực tế những cải tiến có thể được thực hiện theo nhiều nhận xét khác nhau và cố gắng trả lời câu hỏi của bạn, @Narnia.
taswyn 14/11/18

4

nếu bạn muốn sử dụng zsh, hãy tìm đường dẫn của ubuntu1804.exe hoặc ubuntu1604.exe.

trong trường hợp của tôi

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

Hoạt động tốt trên phiên bản 1.32 của mã studio trực quan và WSL với ubuntu. Cảm ơn!
Salvador P.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.