मैं अपने VS कोड टर्मिनल के लिए विंडोज (WSL) पर उबंटू पर बैश का उपयोग कैसे करूं?


87

हालांकि अन्य प्रश्न इस बात से निपटते हैं कि git-bash जैसी चीजों का उपयोग कैसे किया जाए , नए WSL को VS कोड के लिए एक स्पिन के रूप में दिया जाना समान नहीं है: यह आपको git के बजाय एक वास्तविक उबंटू लिनक्स सबसिस्टम पर चलने वाले बैश तक पहुँच प्रदान करता है- bash टर्मिनल विंडोज सबसिस्टम पर चल रहा है।

तो हम इसे वीएस कोड टर्मिनल के रूप में कैसे काम करते हैं, और विशेष रूप से हम इसे कार्यात्मक देव पर्यावरण टर्मिनल के रूप में कैसे काम करते हैं?

गिट-बैश के विपरीत, यह दुर्भाग्य से सरल नहीं है, क्योंकि डब्ल्यूएसएल में उबंटू लिनक्स कॉन्फ़िगरेशन कुछ गोचर्स प्रदान कर सकता है, जैसे कि एनपीएम कोशिश कर रहा है (और विफल हो रहा है) डब्ल्यूएसएल और विंडोज के बीच की बातचीत के कारण आपके विंडोज प्रोग्राम फाइल डायरेक्टरी से ही चल सकता है। पाथिंग की शर्तें, और कुछ संकुल जैसे कि कम्पास के लिए असफल होना जरूरी नहीं है कि किसी ऐसे व्यक्ति को तुरंत स्पष्ट कारण बताएं जो लिनक्स पर विकसित करने के लिए उपयोग नहीं किया जाता है। वीएस कोड के लिए एक विश्वसनीय डब्ल्यूएसएल टर्मिनल पर्यावरण के लिए एक सरल तरीका क्या है जहां सबसे अधिक उपयोग किए जाने वाले उपकरण जब apt-getया इसके माध्यम से इंस्टॉल किए जाएंगे npm?

जवाबों:


184

यह उत्तर दूसरों को 1-2 घंटे की समस्या निवारण में मदद करने के लिए मदद करना चाहता है और वीएस कोड में टर्मिनल के लिए डब्ल्यूएसएल का उपयोग करते समय सामान्य समस्याओं के लिए धीरे-धीरे असमान समाधान खोजने में मदद करता है। यह विशिष्ट पैकेजों को स्थापित करने को कवर नहीं करता है, बल्कि सामान्य हैं जो उन चीजों को स्थापित करते समय निर्भरता के रूप में ठीक से स्थापित नहीं हो सकते हैं जो उनकी उपस्थिति पर भरोसा करते हैं, और संबंधित सामान्य सेटिंग्स को ठीक करने पर।

चरणों का सारांश

  • डब्लूएसएल स्थापित
  • वीएस कोड (या अन्य आईडीई) टर्मिनल के लिए कॉन्फ़िगर किया गया है
  • एनपीएम ने इनफ़िल्टाइल में स्थापित और पथ को ठीक किया (अन्य उपकरणों के साथ मदद कर सकता है)
  • बिल्ड-आवश्यक स्थापित (किसी भी उपकरण के साथ मदद करता है जो मेक / जीसीसी / आदि का उपयोग करते हैं)
  • WSL का उपयोग करके VS कोड कार्य
  • अतिरिक्त

आरंभ और आवश्यकताएँ

  • आपके पास WSL स्थापित होना चाहिए । (जिसका अर्थ है कि आपको 64 बिट विंडोज 10, उपयुक्त अपडेट के साथ चलना चाहिए ) पहले से स्थापित नहीं होने पर इंस्टॉल गाइड का पालन करें । इसके लिए कुछ रिबूट की आवश्यकता होगी।

वीएस कोड टर्मिनल कॉन्फ़िगरेशन

या तो CTRL+ ,कीबोर्ड शॉर्टकट, या FilePreferencesSettings

संपादन विंडो के शीर्ष दाईं ओर, सुनिश्चित करें कि आप अपने लिए सही संदर्भ में काम कर रहे हैं: या तो उपयोगकर्ता सेटिंग्स या कार्यक्षेत्र सेटिंग्स

यहाँ छवि विवरण दर्ज करें

सेटिंग सर्च बार में, टाइप करें terminal.integrated.shell.windows(या जो भी आपको काफी लंबे समय तक मिलता है)

वास्तविक सेटिंग फ़ाइल में सेटिंग ढूंढें, उपयोग करें Edit(लाइन पर माउस, यह बाईं ओर होगा: माउस के बिना एक टच स्क्रीन पर, आपको बस लाइन के बाईं ओर टैप करने में सक्षम होना चाहिए), और चयन करेंReplace in Settings

यहाँ छवि विवरण दर्ज करें

दाएँ फलक में, संशोधित json फ़ाइल में बनाई गई प्रविष्टि को संशोधित करें: पिछली सेटिंग को बदलें

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

यहाँ छवि विवरण दर्ज करें

अन्य आईडीई: इंटेलीज

सेटिंग / टूल / टर्मिनल खोलें और "शेल पथ" फ़ील्ड को सेट करें "C:\Users\USERNAME\AppData\Local\Microsoft\WindowsApps\ubuntu.exe"

अपने WSL Ubuntu बैश टर्मिनल देव के लिए कार्यात्मक बनाना

जब आप टर्मिनल खोलने के लिए CTRL+ `का उपयोग करते हैं, तो आपके पास अब एक बैश टर्मिनल होना चाहिए।

यदि आपने पहली बार bash.exe चलाया है, तो आपसे Ubuntu स्थापित करने के बारे में पूछा जा सकता है। ऐसा करो। एक बार आपका इंस्टॉलेशन पूरा हो जाने के बाद, अपने उपयोगकर्ता नाम और पासवर्ड को WSL Ubuntu में उपयोग करने के लिए चुनें। ये आपके वर्तमान विंडोज खाते के साथ मेल नहीं खाते हैं, और यह ध्यान रखना महत्वपूर्ण है कि वे आपके विंडोज खाते के पासवर्ड में परिवर्तन के आधार पर नहीं बदलेंगे।

एक बार जब आप कर लेते हैं, तो आपके पास अपने टर्मिनल में बैश कमांड प्रॉम्प्ट होगा।यहाँ छवि विवरण दर्ज करें

ध्यान दें कि विंडोज पर गिट-बैश के विपरीत, यह एक अलग वातावरण है। जबकि इसका उपयोग विंडोज सॉफ़्टवेयर को स्वयं के बाहर लॉन्च करने के लिए किया जा सकता है, आपको वास्तविक टर्मिनल के भीतर उन्हें चलाने के लिए उपयुक्त उबंटू पैकेजों की आवश्यकता होगी।

वर्तमान में, WSL आपके द्वारा अपेक्षित सब कुछ के साथ लोड नहीं आता है या होने के लिए इस्तेमाल किया जा सकता है, और कुछ चीजें सॉफ्टवेयर में आपके द्वारा विंडोज में लोड की गई डिफ़ॉल्ट प्रोफाइल सेटिंग्स के आधार पर संघर्ष कर सकती हैं।

अपडेट और गिट

नोट: मैं इन्हें sudo के रूप में उन लोगों के लिए दस्तावेज करने जा रहा हूं, जिन्हें बस इसके एक टुकड़े की आवश्यकता है, लेकिन शुरुआत में एक विकल्प बदले में sudo suऔर बिना sudo के केवल निम्न कमांड चलाने का है।

सुनिश्चित करें कि आपके उबंटू पैकेज अद्यतित हैं:

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

गिट स्थापित करें:

sudo apt-get install git

Node.js और NPM

यदि आपके पास पहले से ही विंडोज में एनओडी या एनपीएम लोड है, तो उन्हें उबंटू में चलाने से पथ समस्याओं के कारण समस्याग्रस्त हो सकते हैं। तो, आपको उबंटू देशी संस्करण स्थापित करने और यह सुनिश्चित करने की आवश्यकता है कि वे इसके बजाय उपयोग किए जाते हैं।

सबसे पहले, एनपीएम के साथ नोड.जेएस स्थापित करें । (वैकल्पिक: NVM स्थापित करें और नोड को स्थापित करने के लिए इसका उपयोग करें। js)

स्थापित करने के बाद, एनपीएम कमांड चलाना संभवतः विफल हो जाएगा: उदाहरण के लिए, 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

नोट: विंडोज टूल्स का उपयोग करके लिनक्स फाइलों को संपादित करने का प्रयास न करें( यह समझाने वाले बोल्ड रेड टेक्स्ट के साथ आधिकारिक लिंक के लिए @ david-c-rankin की टिप्पणी के लिए धन्यवाद ) यदि आप टर्मिनल में इसके लिए एक CLI संपादक का उपयोग नहीं करना चाहते हैं, तो इस लिंक के लिए इस पोस्ट के नीचे देखें कि कैसे एक जीयूआई चलाने के लिए।

वर्तमान में, डब्ल्यूएसएल में डिफ़ॉल्ट बैश पैट वैरिएबल है

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

जो पहले दो बाइनरी निर्देशिकाओं के बाद विंडोज़ पथ को इंजेक्ट कर रहा है। दुर्भाग्य से, इसका परिणाम / usr / bin में विंडोज़ npm स्थापित होने से पहले उपयोग नहीं किया जा रहा है, इसलिए अंतिम $ PATH से पहले इसे जोड़ें:

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

सहेजें, और फिर टर्मिनल को लोड करें या केवल पथ फ़ाइल को स्रोत करें

source ~/.profile

बिल्ड जरूरी

यदि आप ऐसी किसी भी चीज़ का उपयोग कर रहे हैं, जिसे बनाने या अन्यथा उपयोग करने की आवश्यकता है, तो यह लगभग गारंटी है कि आपको इन स्थापित की आवश्यकता होगी; इसलिए यदि आपने उन्हें नोड स्थापित करते समय स्थापित नहीं किया है। तो, ऐसा करें। यह बहुत आसान है कि निर्माण-आवश्यक पैकेज का उपयोग करने के बजाय सब कुछ अलग से स्थापित करने का प्रयास करें।

ध्यान दें कि कॉम्पास जैसे पैकेज जो रूबी एफएफआई पर भरोसा करते हैं, उनके बिना विफल हो जाएंगे। यदि आपको एक उपकरण को ठीक से स्थापित करने और चलाने में समस्या हो रही है, तो सुनिश्चित करें कि आपके पास जीसीसी है और स्थापित करना शुरू करने के लिए एक अच्छी जगह हो सकती है।

sudo apt-get install -y build-essential

उबंटू का उपयोग करके रनिंग टास्क

ध्यान दें कि यदि आप VS कोड के कार्यों का उपयोग करते हैं। बिल्ड कार्यों को चलाने के लिए, डिफ़ॉल्ट रूप से यह अभी भी उबंटू एक के बजाय विंडोज सबसिस्टम का उपयोग करके उन्हें चलाएगा। कभी-कभी यह वही हो सकता है जो आप चाहते हैं, लेकिन अगर आपने उबंटू में ग्रंट-क्ली को स्थापित करना समाप्त कर दिया है और विंडोज नहीं है, तो यह संभवतः नहीं है।

वीएस कोड ने हाल ही में 2017 मई अपडेट किया था कि टास्क कैसे काम करता है जो टर्मिनल के रूप में कार्य धावक को सेट करने की अनुमति देता है । यह अब तक के कार्यों को स्थानांतरित करने का सबसे आसान तरीका है।

बस सेट

"runner": "terminal",

आपके tasks.jsonऔर आप कर रहे हैं (यह मानते हुए कि आपके पास उपयुक्त सभी उपकरण हैं जिन्हें आप अब WSL Ubuntu में स्थापित करने के लिए चला रहे हैं)।यहाँ छवि विवरण दर्ज करें

यह बहुत ही पोर्टेबल है, आदर्श रूप से उन प्रणालियों के बीच कोई बदलाव की आवश्यकता नहीं है जो WSL, या अन्य OSes में नहीं हैं, या वह विधि है जो मैं सुझाऊंगा।

पल के रूप में, यह विधि एक और TERMINALटैब उदाहरण (ड्रॉप डाउन से एक्सेस) को जन्म देती है । आप अभी भी उपयुक्त वॉचर्स सेट कर सकते हैं, लेकिन इसका मतलब यह है कि यह अब OUTPUTटैब पर नहीं बैठा है ।

पुरानी विधि WSL Ubunutu बैश शेल को लागू करने और इसे दिखाने में सक्षम है OUTPUT, और इसमें -c तर्क के साथ bash.exe को कॉल करना या शेल स्क्रिप्ट का उपयोग करना शामिल है। यह दुर्भाग्य से शब्दार्थ नहीं है, क्योंकि हम bashअपनी आज्ञा बना रहे हैं और इसे पारित कर रहे हैं जो हम इसके बजाय एक तर्क के रूप में चलाना चाहते हैं। इसका मतलब यह भी है कि यह अन्य प्रणालियों के लिए जल्दी पोर्टेबल नहीं है।

आप उसी स्थान का उपयोग कर सकते हैं जो आपने पहले वी.एस. कोड के लिए दिया था, C:\\WINDOWS\\Sysnative\\bash.exeमान के लिएcommandयहाँ छवि विवरण दर्ज करें

argsसरणी के पहले तत्व को -cऔर दूसरी को उस कमांड के रूप में सेट करें जिसे आप चलाना चाहते हैं ( इस उत्तर के उत्तरार्ध में क्रेडिट )।

वैकल्पिक रूप से, आप इसके बजाय एक शेल स्क्रिप्ट चला सकते हैं जैसा कि यहां देखा गया है

आगे सहायक बिट्स

WSL बैश कमांड लाइन से विंडोज में VSCode शुरू करना चाहते हैं ?

अपने WSL Ubuntu के लिए एक ग्राफिकल इंटरफ़ेस रखना चाहते हैं ? (यह आपको उबंटू प्रणाली के भीतर फाइलों के लिए लिनक्स जीयूआई संपादक का उपयोग करने जैसी चीजें करने की अनुमति देगा : विंडोज संपादन उपकरण का उपयोग करके उन्हें संपादित न करें, npm पर अनुभाग में टिप्पणी / नोट देखें)

निर्माण करना चाहते हैं (WSL के लिए ठीक से वी.एस. कोड कार्य स्थापित करने पर उपरोक्त भाग देखें) और पूरी तरह से WSL Ubuntu में डिबग करें ? (यह दिखाता है कि कैसे gdb का उपयोग करना है, लेकिन pipeTransportअवधारणा का उपयोग अन्य डीबगर्स के साथ किया जा सकता है) ( इस उत्तर का श्रेय , लेकिन इससे पहले कि यह स्थानीय लूपबैक का उपयोग करके एक विधि प्रदान करता है जो उपयोगी साबित हो सकता है)


10
अच्छा जवाब, यह नोटिस प्रदान करने के लिए भी उपयोगी है कि नए WSL उपयोगकर्ताओं के लिए Windows ऐप्स और टूल का उपयोग करके लिनक्स फ़ाइलों को न बदलें । यह काफी आश्चर्य के रूप में आ सकता है।
डेविड सी। रंकिन

1
महान राइटअप, धन्यवाद! यकीन नहीं होता कि आपने इसे देखा है, लेकिन एक रजिस्ट्री प्रविष्टि भी है जिसे आप विंडोज पेट को बाश में इंजेक्ट करने से रोक सकते हैं , जो मैन्युअल रूप से संपादित करने की तुलना में कई विंडोज उपयोगकर्ताओं के लिए आसान हो सकता है .profile
टोबियास जे

3
@ChangQian इसका कारण यह है कि जब 64 बिट विंडोज़ को रिलीज़ किया गया था, तो उन्होंने 32 बिट कार्यक्रमों के लिए एक फ़ाइल सिस्टम पुनर्निर्देशक जोड़ा, क्योंकि System32 64 बिट डीएलएस / सॉफ़्टवेयर के लिए आरक्षित था। इसके परिणामस्वरूप 32 बिट ऐप्स हैं जो SysWOW64 तक पहुंचने के बजाय System32 तक पहुंचने की कोशिश करते हैं (हाँ यह पीछे की ओर लगता है)। Sysnative बलों ऐसा नहीं करने के लिए, लेकिन 64 बिट सॉफ्टवेयर में * एक्सप्लोरर की तरह दिखाई नहीं देता है। आप 32 बिट कमांड प्रॉम्प्ट का उपयोग करते हुए इसका एक उदाहरण देख सकते हैं: C:\Windows\SysWOW64\cmd.exeऔर रनिंग dir C:\Windows\Sysnative * यह 64 बिट VSCode में काम करता है क्योंकि इसे स्वचालित रूप से अनुवाद करने के लिए कोडित किया गया है
taswyn

2
जब आप अपना टर्मिनल सेट करते हैं, ubuntu.exeतो आप परियोजना के फ़ोल्डर के बजाय उपयोगकर्ता फ़ोल्डर में समाप्त हो सकते हैं। इसलिए आपको करने के लिए अपने टर्मिनल सेट करना चाहते है C:\\Windows\\System32\\wsl.exeके अनुसार github.com/Microsoft/WSL/issues/2795 उपयोग wslconfig /setdefault Ubuntuसुनिश्चित करें कि सही स्थापना शुरू होता है बनाने के लिए।
बर्नहार्ड डब्लर

1
जब मैंने लिखा था कि यह तब था जब डब्ल्यूएसएल को अधिक लॉक किया गया था (डिस्ट्रो च्वाइस / आदि से पहले)। मेरे पास खिड़कियों की एक ताजा स्थापना के साथ एक मशीन है जिसे कम से कम स्प्रिंग क्रिएटर के संस्करण में अपडेट किया गया है, इसलिए मैं अंत में जल्द ही एक वास्तविक नज़र डालूंगा कि विभिन्न टिप्पणियों के अनुसार क्या सुधार किया जा सकता है और आपके प्रश्न का उत्तर देने का प्रयास करें @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 संस्करण और ubuntu के साथ WSL पर ठीक काम किया। धन्यवाद!
साल्वाडोर पी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.