Windows 10に搭載された「WSL(Windows Subsystem for Linux)」は、コマンドプロンプトから呼び出したり、WindowsコマンドとLinuxコマンドをパイプなどを使って組み合わせて処理することができ、とても便利になりました。
ここでは、Windows 10でコマンドプロンプトからWSLを呼び出して、WindowsコマンドとLinuxコマンドを組み合わせた利用例や、利用時の注意点を紹介したいと思います。

目次
動作環境
この記事は、以下の環境で実行した結果を基にしています。他のエディションやバージョンでは、動作結果が異なる場合があることをご了承ください。
項目 | 値 |
---|---|
製品 | Windows 10 Pro 64bit |
バージョン | 1803(April 2018 Update) |
WSLの有効化と、Linuxディストリビューションのインストール方法については、以下の記事で紹介していますので、導入がまだの方はそちらを参考にしてみてください。

利用例
コマンドプロンプトからWSL上のLinuxコマンドを呼び出すには、Linuxコマンドの前に「wsl 」を付けます。各ディストリビューションのアイコンをクリックしてWSL環境(bash)を明示的に起動する必要はありません。
Linuxコマンドの前に付ける「wsl」は「C:\Windows\System32\wsl.exe」というプログラムで、実行するとWSL上にインストールされているLinuxディストリビューションのシェルを呼び出し、引数に指定されたコマンドを実行します。
また、コマンドの結果は、コマンドプロンプト画面に表示されます。
Linuxコマンド「ls -la」を実行するには
コマンドプロンプト上で「wsl ls -la」と入力します。
複数のディストリビューションをインストールしている場合で、ディストリビューションを指定して実行したいときは「wsl -d ディストリビューション名 ls -la」と入力します。
> wsl ls -la
total 30720
drwxrwxrwx 1 hoge hoge 512 Jun 24 19:44 .
drwxrwxrwx 1 hoge hoge 512 Jun 19 14:18 ..
-rwxrwxrwx 1 hoge hoge 10485760 Apr 12 05:30 10m_1.dat
-rwxrwxrwx 1 hoge hoge 10485760 Apr 12 05:30 10m_2.dat
-rwxrwxrwx 1 hoge hoge 10485760 Apr 12 05:30 10m_3.dat
drwxrwxrwx 1 hoge hoge 512 Apr 12 07:16 work
WindowsコマンドとLinuxコマンドを組み合わせるには
パイプで連結すれば、WindowsコマンドとLinuxコマンドを組み合わせて実行できます。
たとえば、dirコマンド(Windowsコマンド)で拡張子がhtmlのファイルを出力し、wcコマンド(Linuxコマンド)でファイル数をカウントする場合、次のように実行できます。
> dir /b /s *.html | wsl wc -l
5
注意点
文字コード
WindowsコマンドとWSLのLinuxコマンドを組み合わせて利用する場合、文字コードに注意が必要です。
多くのLinuxディストリビューションでは、標準の文字コードとして「UTF-8」が使用されていますが、Windows(日本語版)のコマンドプロンプトでは「Shift_JIS」が標準の文字コードとなっています。そのため、日本語が含まれているデータをパイプでWSLのLinux環境に渡す場合、文字コードを変換してから渡さないと日本語が文字化けした状態で処理されることがあります。
たとえば、次のようにdirコマンドの結果をWSLのLinux環境で表示しようとすると、そのままでは日本語が文字化けしてしまいます。
> dir | wsl while read s; do echo -e ${s}; done;
この場合は、Windows上で文字コードをUTF8に変換してからWSLのLinux環境へ渡すことで文字化けせずに処理することができます。
(ここでは、文字コードを変換をするために「nkf」というツールを使用しています。)
> dir | nkf -w | wsl while read s; do echo -e ${s}; done;
「nkf」は、文字コードの変換作業ではよく使われる定番のツールです。コマンドプロンプトで作業する機会が多い方は、用意しておくと便利です。

パス名
WindowsとWSLのLinux環境ではパス名の表記が異なり、Windowsの「C:」はWSLのLinux環境では「/mnt/c/」になります。
WSLにはパス表記を変換してくれるコマンド「wslpath」が用意されており、Windowsコマンドから渡されたパスの表記を、Linux環境のパス表記に変換することができます。
コマンド | 説明 |
---|---|
wslpath <Windowsパス> | WSL向けのパスに変換する |
wslpath -a <Windowsパス> | WSL向けの絶対パスに変換する |
wslpath -w <WSLパス> | WSLからWindowsパスに戻す(パス区切りは「」) |
wslpath -m <WSLパス> | WSLからWindowsパスに戻す(パス区切りは「/」) |
あとがき
WSL環境に限らず、Linux環境には便利なツール(コマンド)がたくさんあります。
これらの便利なコマンドと、Windowsコマンドをうまく組み合わせれば、これまで苦労していた処理が楽に記述できことも結構あるのではないでしょうか。
ご活用あれ。