Windowsの環境変数とLinuxの環境変数を相互に引き継ぎ可能に
「Build 17063」では相互運用の改良が行われ、Windowsの環境変数とLinuxの環境変数を相互に引き継げるようになりました。現在Windowsで設定されている「PATH」環境変数が、Linuxの「PATH」環境変数に自動的に引き継がれるようになっています。
これに加えWindowsで設定されている任意の環境変数を、Linuxの環境変数に引き継ぐことができます。
と同時に、Linuxで設定されている任意の環境変数を、Windowsの環境変数に引き継ぐこともできます。
引き継ぐ環境変数はユーザーが指定する
Windows及びLinux環境で設定されているすべての環境変数が、自動的にお互いの環境変数に引き継がれることはありません。引き継ぎたい環境変数は、ユーザーが別途指定する必要があります。
どうやって引き継ぎたい環境変数を指定するのか?
お互いに引き継ぎたい環境変数を「WSLENV」環境変数に指定することで、「WSLENV」環境変数に列挙されている環境変数がお互いの環境に引き継がれます。環境変数の引き継ぎには、以下の流れがあります。
- Windows(Win32プロセス)>Linux(WSL)
- Linux(WSL)>Windows(Win32プロセス)
「1.」は、Windows環境からLinuxプログラムを実行した時に発生する流れです。
「2.」は、Linux環境からWindowsプログラムを実行した時に発生する流れです。
この流れを配慮した環境変数の引き継ぎ方法を指定することもできます。
つまり、Windows環境からLinux環境に引き継ぎたい環境変数があるが、Linux環境からWindows環境に引き継ぎたくない環境変数を指定することもできます。
WSLENV環境変数の使い方
「WSLENV」環境変数の使い方です。フォーマット
「WSLENV」環境変数は、以下のフォーマットに従います。
WSLENV=引き継ぎたい環境変数[/サフィックス]:引き継ぎたい環境変数[/サフィックス]・・・
引き継ぎたい環境変数を「:」で区切りながら列挙します。
また各環境変数にはサフィックスを指定し、引き継ぎ方法を制御することもできます。
サフィックスは省略可能です。
記述例は以下のようになります。
WSLENV=EDITOR:VERSION:DISPLAY
サフィックス
各環境変数には、以下のサフィックスを指定できます。サフィックス | 概要 |
---|---|
p | 環境変数の内容が単一のパスを表しており、 WindowsのパスとLinuxのパスを変換して環境変数を引き継ぐ |
l | 環境変数の内容が複数のパスを表しており、 WindowsのパスとLinuxのパスを変換して環境変数を引き継ぐ。 この時パスの区切りは、Windows環境では「;」で区切り、 Linux環境では「:」で区切るように変換される |
u | Windows環境からLinux環境を起動した時にのみ、環境変数を引き継ぐ |
w | Linux環境からWindows環境を起動した時にのみ、環境変数を引き継ぐ |
複数のサフィックスを指定する場合は、「/pu」のように記述します。
記述例は以下のようになります。
WSLENV=GOPATH/l:USERPROFILE/pu:DISPLAY
パスの変換と引き継ぎについて
Windows環境とLinux環境では、パスの位置が異なります。例えばWindows環境における「C:\」は、Linux環境では「/mnt/c/」になります。
Linux環境起動時にボリュームがマウントされていない等の理由でパスの変換に失敗した場合、その変換に失敗したパスは引き継がれません。
パスを含む環境変数の例
ここでは例として複数のパスを含む環境変数を、Windows環境からLinux環境へ引き継いでみます。1.MYPATH環境変数の設定
まずWindows環境で「MYPATH」環境変数を設定します。「MYPATH」環境変数は以下の内容にしました。
MYPATH=C:\Users\kledg\test1;C:\Users\kledg\test1\test2
複数のパスを含むため、各パスはWindowsのルールに従い「;」で区切っています。
cmdを起動し、以下のコマンドを実行して「MYPATH」環境変数を設定します。
set MYPATH=C:\Users\kledg\test1;C:\Users\kledg\test1\test2
これでこのWindows環境で「MYPATH」環境変数が設定されました。
2.WSLENV環境変数の設定
次に「MYPATH」環境変数をLinux環境に引き継ぐため、「WSLENV」環境変数を設定します。この時「MYPATH」環境変数は複数のパスを含む環境変数であり、パスの変換が必要になります。
つまり「/l」サフィックスを指定する必要があります。
以下のコマンドを実行して「WSLENV」環境変数を設定します。
set WSLENV=MYPATH/l
これで準備完了です。
3.環境変数の確認
上記で設定した環境変数の中身を出力してみます。ちゃんと設定されていますね。
4.Linuxの起動
以下のコマンドを実行し、「Ubuntu(bash)」を起動します。
ubuntu
「Ubuntu(bash)」が起動したら以下のコマンドを実行し、「MYPATH」環境変数の内容を出力します。
env | grep MYPATH
以下のように「MYPATH」環境変数が引き継がれていることが分かります。
MYPATH=/mnt/c/Users/kledg/test1:/mnt/c/Users/kledg/test1/test2
パスの変換及び「:」区切りへの変換も行われています。
WSLENV環境変数をどこで設定するのが良いか
上記の例は、起動したコンソール(Windows)環境内でのみ有効な環境変数の設定方法です。毎回手動で「WSLENV」環境変数を設定するのは手間でしょう。
Windowsの場合
Windowsで「WSLENV」環境変数を設定するなら、ユーザーの環境変数として「WSLENV」環境変数を登録しておくのが良いでしょう。ユーザーの環境変数を設定するには、「コントロールパネル」を起動し、「システムとセキュリティ」>「システム」へ移動します。
左側の項目一覧にある「システムの詳細設定」をクリックし、「システムのプロパティ」画面を表示して「詳細設定」タブをクリックします。
画面下部に「環境変数」ボタンがあるので、このボタンをクリックします。
以下のようにユーザーの環境変数を設定する画面が表示されるので、ここで「WSLENV」環境変数を追加し、環境変数の中身を指定すると良いでしょう。