WSLの中で暮らすためのメモ
Windows10 RS4 アップデートで、WSL周りがかなり使いやすくなった。以前よりもさらにWSLとWindows間での連携がやりやすくなっています。
そんなわけで、WSLのメモ。
ちなみに、ターミナルエミュレータなどを使わずに、使い勝手がいいとは言えないが標準のDOS窓を使うのがトラブルが少なくてよい。
WSL(bash.exe)を起動する
起動時に、~ を引数として渡しておくと、ホームディレクトリから始まるので使いやすい。
C:\Windows\System32\bash.exe ~
WSLからバッチファイルを実行する。
cmd.exe に /c オプションを渡します。パスを指定するときはWindowsからパスで指定します。
cmd.exe /c c:\hoge\fuga.bat
バッチファイルをcmd.exeを指定せずに起動できるようにする。
binfmtで登録しておきます。
sudo sh -c "echo :WindowsBatch:E::bat::/init: > /proc/sys/fs/binfmt_misc/register" sudo sh -c "echo :WindowsCmd:E::cmd::/init: > /proc/sys/fs/binfmt_misc/register"
WSLのファイルをWINDOWS側のパスに変換する
/bin/wslpath コマンドを使うとよい。aコマンドを外すと相対パスになります。wではなく、uを渡すとWSL内のパスになります。
w(indows), u(nix) と覚えるよいいかも?
$ /mnt/c/hoge/fuga $ slpath -aw foo.bar.txt c:\hoge\fuga\foo.bar.txt
参考 wslpath has no "usage" or "help" information · Issue #2715 · Microsoft/WSL · GitHub
WSLからWindowsの実行ファイルを実行してみる
拡張子の .exe を忘れなければOK。
hoge.exe
ただし、これだと hoge.exe が終了するまでコンソールに戻ってこないのでGUIアプリの場合はバックグラウンド実行するとよい。やりかたは、コマンドの最後に & をつけるだけ。
hoge.exe &
試しにWSLからAndroidアプリをビルドしてみる。
※binfmtで.batを登録済み
cd /mnt/d/myproj (cd android && ./gradlew.bat installDebug)
試しにWSLからVisualStudioのプロジェクトをビルドしてみる。
alias msbuild="/mnt/c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio/2017/Community/MSBuild/15.0/Bin/MSBuild.exe" cd /mnt/d/myproj/ (cd vcprj && msbuild)
WindowsからWSL内のファイルを操作する(今のところ禁止)
Windows10RS4の段階では、Windows側から直接操作してはいけません。というのも、Linuxのファイルシステムにはパーミッションだったり、ファイル名の大文字小文字の区別など、Windows(というかNTFS)のファイルシステムにはない情報が必要なため、VolFSというシステムを用いて裏でいろいろと行っています。
Windowsからファイルを操作するとこのVolFSとの情報にズレが出るため、おかしなことになります。
Microsoft Store からWSLをインストールした場合以下の場所に入っています。
C:\Users\USERNAME\AppData\Local\Packages\PACKAGENAME\LocalState\rootfs
※将来的にはWindowsからも気にせず操作できるようになるといいのになぁ。