実録コンピュータ物語

趣味で使っているコンピュータ&ソフトの情報を発信するブログです。

Windows上のVSCode + Code RunnerでWSLのコマンドを実行する

Visual Studio CodeCode Runner拡張機能Windows側から WSL(Windows Subsystem for Linux)のコマンドを実行する設定方法です。

実行環境

設定方法

例としてWSLのperlを実行するようにします。Visual Studio Codeのユーザー設定(settings.json)に以下のように入力します。WSLのコマンドの呼び方は 「Windows 10のコマンドプロンプトからWSL上のLinuxコマンドを呼び出す(バージョン1803対応版):Tech TIPS - @IT」が詳しいです。

{
    "code-runner.executorMap": {
        "perl": "cd $dir && wsl perl $fileName"
    },
}

試しに実行中のOSを出力するperlスクリプトを実行してみます。Windows版のperlだと「MSWin32」となる所が「linux」になり、WSL上で実行されている事がわかります。

f:id:bosh:20190609152116p:plain
WSL上のperlが実行された

補足

ちなみに単純化して以下のようにしても、パスがWindowsのフォーマットで渡されるため動作しません。これを避けるために上記の設定ではcd $dirを入れてカレントディレクトリを移動し、ファイルのフルパスを渡さないようにしています。

{
    "code-runner.executorMap": {
        # 動作しない
        "perl": "wsl perl"
    },
}

f:id:bosh:20190609153116p:plain
パスのフォーマットがWindowsのままなので実行に失敗する

設定方法その2(wslpathを使う方法)

最初の設定では「wsl.exeは実行時のカレントディレクトリをそのまま引き継ぐ」ということを利用してcd $dirを入れていました。もう1つ、wslpathを使ってきちんとパスを変換する方法もあります。

{
    "code-runner.executorMap": {
        "perl": "bash -c \"perl $(wslpath $fullFileName)\""
    },
}

この場合のbashLinux上ではなく、WSLをセットアップするとインストールされるbash.exeが実行されます。-cオプションのコマンドはWSL上で実行されるので、Code Runnerのパラメータである$fullFileNamewslpathでWSLフォーマットに変換すればいいということになります。カレントディレクトリを変更しないという点では、こちらの方が本来の動作に近いと言えます。

ただし、この方法の場合はパスの途中に空白を含むファイルは実行できません。最初のcd $dir方式では問題なく実行できます。

f:id:bosh:20190609160225p:plain
wslpathでパスを変換して実行