wsl:run-wsl
はwsl.exeを使って指定コマンドを実行し、終了するまで待って出力結果とプロセス終了コードを多値で返す。
キーワード引数 :run-on-shell
にtを指定した場合、デフォルトシェル上で実行する。 (wsl.exe -- <args>
とするのと同じ)
:run-on-shell
引数を省略(or nilを指定)した場合は直接実行する。(wsl.exe --exec <args>
とするのと同じ)
> (wsl:run-wsl "ls ~" :run-on-shell t)
"bin
code
opt
"
0
> (wsl:run-wsl "ruby --version")
"ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux-gnu]
"
0
終了しないコマンド(bashとかirbとか)を実行してしまった場合は永遠に待ち続けてしまうので C-g
で抜ける。(wsl.exeのプロセスはkill-process
される)
wsl:run-wsl-in-buffer
は引数をwsl.exeに渡し、出力結果をバッファ上に表示にする。
出力先バッファはキーワード引数:buffer
で指定する。省略時は*wsl-output-buffer-name*
で指定されているバッファに出力する。
実行中のコマンドを強制終了したい場合は、出力バッファ上でC-c C-k
非公開の関数%run-wsl-sync
を使うとコマンド実行以外の機能(--list
とか--help
とか)を呼び出せるが、出力が何故かUTF-16になる & 謎のNUL文字が混じる。 (未対策)
> (wsl::%run-wsl-sync "--list" *encoding-utf16le-bom*)
"Linux 用 Windows サブシステム ディストリビューション:^@
Ubuntu-20.04 (既定)^@
"
0
> (wsl::%run-wsl-sync "--list -v" *encoding-utf16le-bom*)
" NAME STATE VERSION\Xd60a\Xd700\Xd62a\Xd700\X0d86\X647c戀\Xc7b3\X6b3a\X6ccb\Xc7b3\Xd62d\Xd700\X1a00 \Xd62e\Xd700 \Xd634\Xd700\X0d86\X0d86\X0d86\X0d86匀\X6ccb\Xc9c7\X6bb9\X6bb9攀\X4090\X0d86\X0d86\X0d86\X0d86\X0d86\X0d86\X0d86\X0d86\X0d86\Xd631\Xd700
"
0
wsl.exe --list -v
の結果は\0の入る場所がマズいらしくまともにデコード出来ない。
WSL上でwslpath
を呼び出して変換する
> (wsl:convert-wslpath-to-win "~/code")
"\\\\wsl$\\Ubuntu-20.04\\home\\yu\\code"
> (wsl:convert-winpath-to-wsl "D:/project")
"/mnt/d/project"