Windows アプリを WSL上から起動するとき、windowsアプリに環境変数を渡す方法(とその逆)。

WSLENV を使うことでWSLとWindows間で環境変数を共有できる。

下記例はWSL上から起動する Windowsアプリ app.exeRUST_LOG=info を渡す例。 WSLENV=RUSTLOG が無いと app.exeRUST_LOG が渡されない。

  WSL$ RUST_LOG=info WSLENV=RUST_LOG ./target/x86_64-pc-windows-msvc/debug/app.exe

WSLENV の値はWSL/Windows の間で共有したい環境変数名(とそれに対するフラグ)を列挙したもの。環境変数間は : で区切る。

/ 以降がフラグ。省略可能。

フラグ一覧:

  • p : 環境変数の値がパスであることを示す。設定すると環境変数を渡す際にパス変換が行われる。例: /mnt/c/temp <-> C:\temp
  • l : 環境変数の値がパスのリストであることを示す。 p 同様、環境変数を渡す際にパス変換&リストの区切り文字( : <-> ; )変換が行われる。
  • u : 環境変数を渡す方向を Windows -> WSL に制限する。
  • w : 環境変数を渡す方向を WSL -> Windows に制限する。

例えば下記の設定なら…

WSLENV=HOME/w:GOPATH/l:TMPDIR/p
  • HOME をWSL上からWindowsアプリ起動時に渡す。パス変換なし。
  • GOPATH をWindowsからWSLアプリ、WSLからWindowsアプリの双方向で渡す。パスのリストは渡す先の形に変換する。
  • TMPDIR を同様に双方向で渡す。パスは渡す先の形に変換する。