LoginSignup
1
1

More than 5 years have passed since last update.

WSLのbash上でコマンドプロンプトの環境変数を取得する

Last updated at Posted at 2018-01-14

やりたかったのは、WSLのbashから、Windowsユーザのホームディレクトリ %USERPROFILE% を取得して、bashの環境変数に入れなおすことでした。

まずイマイチな方法。

$ export USERPROFILE=$(cmd.exe /c "echo %USERPROFILE%")
$ echo $USERPROFILE
C:\Users\username

一見、取れているのですが、この値をもとにbash上でcdしてみます。
# パイプで渡しているtrsedは、先頭に/mnt/をつけたり、ドライブレターを小文字にしたり、セパレータを/に変えたりしてます

$ cd $(echo $USERPROFILE | tr '\\' '/' | sed -E "s/^(.):/\/mnt\/\l\1/")
: そのようなファイルやディレクトリはありません

この通り、失敗します。

原因は%USERPROFILE%を出力しているコマンド、echoでした。
echoは通常最後に改行コードを追加するので、それもひっくるめてbashの環境変数$USERPROFILEに格納されているようです。

次に成功した方法。

echoで改行させなければよいのですが、コマンドプロンプトのechoは改行コード無しのオプションがないので、代わりにsetコマンドで%USERPROFILE%を出力します。

$ export USERPROFILE=$(cmd.exe /c "set /P<NUL=%USERPROFILE%")
$ echo $USERPROFILE
C:\Users\username

出力されている結果は一見同じですが、問題なくcdできます。

ちなみに、echoを使ってもsed等で末尾の改行コードを削除してもいけます。


追記。
ビルド17063以降なら、WSLENVという環境変数を使えば、相互に受け渡し可能らしいです。
https://news.mynavi.jp/itsearch/article/hardware/3364

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1