概要
WindowsバッチからWSL (Windows Subsystem for Linux)のコマンドを呼び出す方法について解説します。
WSLコマンドの呼び出し
WSLコマンドをWindowsバッチから呼び出すには、wslコマンドの引数に実行したいLinuxのコマンドを指定します。
C:\>wsl pwd
/mnt/c
パス表現
WindowsのパスはWSLにおいて以下のように表現されます。ここでは"C:\Users"を指定しています。
/mnt/c/Users
パス変換
WindowsのパスとWSLのパスを相互変換するには、wslpathコマンドを使用します。wslpathコマンドはwslコマンドに続けて打ち込みます。
-uオプションでWindowsパスをWSLのパスに変換します。
C:\>wsl wslpath -u C:\
/mnt/c/
-wオプションでWSL形式のパスをWindowsのパスに変換します。
C:\>wsl wslpath -w /mnt/c/Users
C:\Users
パイプ
wslコマンドの引数としてパイプ(|)を渡すことはできません。通常のWindowsコマンドと同様にwslコマンドを実行し、その結果を再度wslコマンドにパイプで渡すことでLinuxコマンドを連続して実行できます。
例)
C:\>wsl ls /mnt/c | wsl grep Users
Users
復帰値
WSL側のコマンド復帰値はWindows側のERRORLEVEL環境変数に格納されます。
C:\>wsl exit -1
C:\>echo %ERRORLEVEL%
255
サンプル
サンプルとしてWindowsのnetstatコマンドの結果から、TCPポートのbind状況のみを取得するワンライナーコマンドを実装します。
C:\>netstat -ano | wsl grep TCP | wsl awk '{print $2}'
0.0.0.0:135
0.0.0.0:445
0.0.0.0:5040
0.0.0.0:5357
0.0.0.0:49664
0.0.0.0:49665
0.0.0.0:49666
0.0.0.0:49667
0.0.0.0:49668
0.0.0.0:49669
0.0.0.0:49670
0.0.0.0:49671
0.0.0.0:49672
0.0.0.0:49678
0.0.0.0:49704