やりたかったのは、WSLのbashから、Windowsユーザのホームディレクトリ %USERPROFILE%
を取得して、bashの環境変数に入れなおすことでした。
まずイマイチな方法。
$ export USERPROFILE=$(cmd.exe /c "echo %USERPROFILE%")
$ echo $USERPROFILE
C:\Users\username
一見、取れているのですが、この値をもとにbash上でcdしてみます。
# パイプで渡しているtr
とsed
は、先頭に/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