Windows アプリを WSL上から起動するとき、windowsアプリに環境変数を渡す方法(とその逆)。
WSLENV を使うことでWSLとWindows間で環境変数を共有できる。
下記例はWSL上から起動する Windowsアプリ app.exe に RUST_LOG=info を渡す例。 WSLENV=RUSTLOG が無いと app.exe に RUST_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を同様に双方向で渡す。パスは渡す先の形に変換する。