Windows10:WindowsコマンドとLinuxコマンドを組み合わせて使う(WSL)

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

ここでは、Windows10でコマンドプロンプトからWSLを呼び出して、WindowsコマンドとLinuxコマンドを組み合わせた利用例や、利用時の注意点を紹介したいと思います。

動作環境

この記事は、以下の環境で実行した結果を基にしています。他のエディションやバージョンでは、動作結果が異なる場合があることをご了承ください。

項目
製品 Windows10 Professional 64bit
バージョン 1803(April 2018 Update)

WSLの有効化と、Linuxディストリビューションのインストール方法については、以下の記事で紹介していますので、導入がまだの方はそちらを参考にしてみてください。

Windows10:Windows上でLinuxコマンドを使う(WSL)
Windowsを使っていると、テキスト処理などでLinuxコマンドを使えたらなぁと思うことがあります。以前だったら、同等の機能が利用でき...

利用例

コマンドプロンプトからWSL上のLinuxコマンドを呼び出すには、Linuxコマンドの前に「wsl 」を付けます。各ディストリビューションのアイコンをクリックしてWSL環境(bash)を起動する必要はありません。

Linuxコマンドの前に付ける「wsl」は「C:\Windows\System32\wsl.exe」というプログラムです。これを実行すると、WSL上にインストールされているLinuxディストリビューションのシェルを呼び出し、引数に指定されたコマンドを実行します。コマンドの結果は、コマンドプロンプトに返され画面に表示されます。

Linuxコマンド「ls -la」を実行するには

コマンドプロンプト上で「wsl 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;

Memo

「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コマンドをうまく組み合わせれば、これまで苦労していた処理が楽に記述できるようになるかもしれません。

スポンサーリンク