VS CodeターミナルにUbuntu on Windows(WSL)でBashを使用するにはどうすればよいですか?


87

他の質問はgit-bashのようなものの使用方法を扱っていますが、VS Codeのターミナルとして新しいWSLをスピンさせることは同じではありません。それは、git-の代わりに実際のUbuntuLinuxサブシステムで実行されているbashへのアクセスを提供します。 Windowsサブシステムで実行されているbashターミナル。

では、どのようにしてVS Codeターミナルとして機能させるのでしょうか。特に、機能的な開発環境ターミナルとしてどのように機能させるのでしょうか。

git-bashとは異なり、残念ながらこれはそれほど単純ではありません。WSLのUbuntu Linux構成では、WSLとWindows自体の相互作用により、NPMがWindowsプログラムファイルディレクトリから実行しようとする(失敗する)などの問題が発生する可能性があるためです。パスの条件、およびLinuxでの開発に慣れていない人にとって、必ずしもすぐに明らかな理由ではない理由でCompassなどの一部のパッケージが失敗する。apt-getまたはを介してインストールしたときに最も頻繁に使用されるツールが実行されるVSCode用の信頼性の高いWSLターミナル環境を作成する簡単な方法は何npmですか?

回答:


184

この回答は、VS Codeの端末にWSLを使用するときに、他の人がトラブルシューティングに1〜2時間費やしたり、一般的な問題のさまざまな解決策をゆっくり見つけたりしないようにすることを目的としています。特定のパッケージのインストールについては説明していませんが、それらの存在に依存するものをインストールするときに依存関係として適切にインストールされない可能性のある一般的なパッケージ、および関連する一般的な設定の修正について説明します。

手順の概要

  • WSLがインストールされています
  • 端末用に構成されたVSCode(または他のIDE)
  • NPMがインストールされ、.profileにパスが修正されました(他のツールで役立つ場合があります)
  • build-essentialがインストールされています(make / gcc / etcを使用するすべてのツールに役立ちます)
  • WSLを使用したVSコードタスク
  • エクストラ

はじめにと要件

VSCodeターミナル構成

どちらのCTRL+の,キーボードショートカット、またはFilePreferencesSettings

編集ウィンドウの右上で、ユーザー設定またはワークスペース設定のいずれかの正しいコンテキストで作業していることを確認します。

ここに画像の説明を入力してください

設定の検索バーに、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 UbuntuBashターミナルを開発者向けに機能させる

CTRL+`を使用してターミナルを開くと、bashターミナルができているはずです。

bash.exeを初めて実行する場合は、Ubuntuのインストールについて尋ねられることがあります。そうする。インストールが完了したら、WSLUbuntuで使用するユーザー名とパスワードを選択します。これらは現在のWindowsアカウントと一致している必要はありません。また、Windowsアカウントのパスワードの変更に基づいて変更されないことに注意することが重要です。

完了すると、ターミナルにbashコマンドプロンプトが表示されます。ここに画像の説明を入力してください

Windowsのgit-bashとは異なり、これは別の環境であることに注意してください。それ自体の外部でWindowsソフトウェアを起動するために使用できますが、実際のターミナル内で実行するには適切なUbuntuパッケージが必要です。

現在、WSLには、期待する、または慣れているすべてのものがロードされているわけではなく、デフォルトのプロファイル設定に基づいて、Windowsにロードしたソフトウェアと競合するものもあります。

アップデートとgit

注:これを1つだけ必要とする人のために、これらをsudoとして文書化しますが、最初の1つのオプションは、代わりにsudo susudoを使用せずに次のコマンドを実行することです。

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

すでにWindowsにNodeまたはNPMがロードされている場合、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エディタを使用してnanovimemacscatsed...等)、あなたを開きます~/.profile

nano ~/.profile

注:Windowsツールを使用してLinuxファイルを編集しようとしないでください。(これを説明する太字の赤いテキストを含む公式リンクに対する@ david-c-rankinのコメントに感謝します)ターミナルでこれにCLIエディターを使用したくない場合は、この投稿の下部にある方法のリンクを参照してください。 GUIを実行します。

現在、WSLのデフォルトのbashPATH変数は

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

これは、最初の2つのバイナリディレクトリの後にWindowsパスを挿入しています。残念ながら、これにより、Windowsがnpmをインストールする前に/ usr / binが使用されることはないため、最後の$ PATHの前に追加します。

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

保存してから、端末をリロードするか、パスファイルを入手してください

source ~/.profile

ビルドエッセンシャル

コンパイルが必要なものを使用している場合、またはmakeを使用している場合は、これらをインストールする必要があることがほぼ保証されています。したがって、node.jsのインストール中にインストールしなかった場合は、インストールしてください。すべてを個別にインストールするよりも、build-essentialパッケージを使用する方がはるかに簡単です。

Ruby FFIに依存するCompassなどのパッケージは、これらがないと失敗することに注意してください。ツールの適切なインストールと実行に問題がある場合は、gccとmakeがインストールされていることを確認することから始めるのがよいでしょう。

sudo apt-get install -y build-essential

Ubuntuを使用したタスクの実行

VS Codeのtasks.jsonを使用してビルドタスクを実行する場合、デフォルトでは、UbuntuではなくWindowsサブシステムを使用して実行されることに注意してください。時には、これはあなたが望むかもしれないが、あなただけのUbuntuのではなく、Windowsの作男-CLIのインストールが完了した場合、それはおそらくありません。

VS Codeは最近、2017年5月にタスクの動作を更新し、タスクランナーをターミナルとして設定できるようにしました。これは、タスクを移行する最も簡単な方法です。

設定するだけ

"runner": "terminal",

tasks.json完了しました(実行しようとしている適切なツールがすべてWSL Ubuntuにインストールされていると仮定します)。ここに画像の説明を入力してください

これは非常に移植性が高く、理想的にはWSLがあるシステムとないシステム間、または他のOS間で変更を加える必要がなく、私がお勧めする方法です。

現時点では、このメソッドは別のTERMINALタブインスタンスを生成します(ドロップダウンからアクセスされます)。適切なウォッチャーを設定することはできますが、それはOUTPUTタブに座っていないことを意味します。

古いメソッドは、WSL Ubunutu Bashシェルを呼び出して、に表示するOUTPUTことができ、-c引数を指定してbash.exeを呼び出すか、シェルスクリプトを使用する必要があります。残念ながら、私たちが作っているので、それは意味論的ではありませんbash、コマンドを、代わりに引数として実行したいものを渡す。これは、他のシステムへの移植性がそれほど速くないことも意味します。

C:\\WINDOWS\\Sysnative\\bash.exeの値として、端末自体に以前にVSCodeを指定したのと同じ場所を使用できます。commandここに画像の説明を入力してください

args配列の最初の要素-cを実行するコマンドとして設定し、2番目の要素を実行するコマンドとして設定します(この回答の後半にクレジットします)。

または、ここに示すように、代わりにシェルスクリプトを実行することもできます

さらに役立つビット

WSL BashコマンドラインからWindowsでVSCode起動したいですか?

持つようにしたいあなたのWSLのUbuntu用のグラフィカルインタフェースを?(これは、ファイルのために使用のようなものLinuxのGUIエディタを行うことができます内のUbuntuシステム自体:ない編集彼らはWindowsの編集ツールを使用して、NPMのセクションにコメント/ノートを参照してください)

ビルドして(WSL用にVS Code Tasksを適切に設定する方法については上記の部分を参照)、完全にWSL Ubuntu内デバッグしたいですか?(これは、gdbを使用してこれを行う方法を示していますが、このpipeTransport概念は他のデバッガーでも使用できます)(この回答の功績ですが、前の回答では、ローカルループバックを使用する方法も提供されています)。


10
良い答えです。Windowsアプリとツール使用してLinuxファイルを新しいWSLユーザーに変更しないでくださいという通知を提供することも役立ちます。これは非常に驚きです。
デビッドC.ランキン2017年

1
素晴らしい記事、ありがとう!これを見たかどうかはわかりませんが、Windows PATHがBashに挿入されないようにするために作成できるレジストリエントリもあります。これは、多くのWindowsユーザーが手動で編集するよりも簡単な場合があります.profile
トビアスJ

3
@ChangQianこの理由は、64ビットウィンドウがリリースされたときに、System32が64ビットdll /ソフトウェア用に予約されていたため、32ビットプログラム用のファイルシステムリダイレクタが追加されたためです。これにより、32ビットアプリがSysWOW64にアクセスする代わりにSystem32にアクセスしようとします(はい、逆に見えます)。Sysnativeはこれを強制的に発生させませんが、Explorerのような64ビットソフトウェア*には表示されません。32ビットコマンドプロンプトを使用してこの例を見ることができます:C:\Windows\SysWOW64\cmd.exeそして実行中dir C:\Windows\Sysnative *これは自動的に変換するようにコード化されているため、64ビットVSCodeで機能します
taswyn 2017年

2
ターミナルをに設定するubuntu.exeと、プロジェクトのフォルダではなく、ユーザーフォルダに移動する可能性があります。そのためC:\\Windows\\System32\\wsl.exegithub.com / Microsoft / WSL / issues / 2795に従って端末を設定wslconfig /setdefault Ubuntuする必要があります。これを使用して正しいインストールが開始されることを確認します。
ベルンハルトDöbler

1
私がこれを書いたとき、それはWSLがはるかにロックダウンされたときでした(ディストロの選択などの前に)。少なくともSpringCreatorのエディションに更新されたWindowsのフレッシュインストールを備えたマシンを持っているので、さまざまなコメントごとにどのような改善を行うことができるかを間もなく実際に見て、質問に答えようとします、@ 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で正常に動作しました。ありがとう!
サルバドール

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.