目次
1. はじめに
Windows と Linux とでは「パス」のフォーマットが違うため、WSL (Windows Subsystem for Linux) では、パス関連の問題が起きがちです。
例えば、Windows において以下のように表現されるパスがあったとします。
同じパスを WSL側から表現すると、こうなります。
こちらは、Linux でのパスフォーマットです。フォルダ階層の区切り文字も違いますし、Cドライブは /mnt/c
と表現されます。
WSL 上で何か処理を行った場合、WSL は内部でこのパスフォーマットの変換をやってくれるため、あまり問題が起きるようなことはありません。しかし、それでも明示的なパスフォーマット変換を行いたい場合のためにツールが用意されています。
それが、wslpath
コマンドです。
2. wslpath コマンド
wslpath
は標準で使えるコマンドで、Windows と WSL とのパスフォーマット変換を行うことができます。
オプション
どちらからどちらへの変換なのか、オプションで指定できるようになっています。
※ 通常、コマンドには「使い方」を表示するためのオプションや、manページが用意されているのですが、今のところなぜか用意されていないようです。Release Notes | Microsoft Docs には、以下のように Usage (使い方) が載っています。
wslpath usage:
-a force result to absolute path format
-u translate from a Windows path to a WSL path (default)
-w translate from a WSL path to a Windows path
-m translate from a WSL path to a Windows path, with ‘/’ instead of ‘\\’
EX: wslpath ‘c:\users’
順番に説明します。
-a
オプション
- WSL のパスフォーマットで、絶対パスに変換します。
- 引数で与えた文字列の頭に、カレントディレクトリの絶対パスが追加されるようです。
$ cd ~/work/
$ echo $PWD
/mnt/c/Users/foo/work
$ wslpath -a bar
/mnt/c/Users/foo/work/bar
※ $PWD
は現在いるパス(カレントディレクトリ)を格納している環境変数です。
(例)
引数: bar
↓
出力: /mnt/c/Users/foo/work/bar
-u
オプション
- 引数で与えた Windows のパス を、WSL のパスに変換します。
$ wslpath -u 'C:\Users\foo\work'
/mnt/c/Users/foo/work
(例)
引数: C:\Users\foo\work
↓
出力: /mnt/c/Users/foo/work
-w
オプション
- WSL のパス を Windows のパスに変換します。
$ cd ~/work/
$ echo $PWD
/mnt/c/Users/foo/work
$ wslpath -w $PWD
C:\Users\foo\work
(例)
引数: /mnt/c/Users/foo/work
↓
出力: C:\Users\foo\work
-m
オプション
- WSL のパス を Windows のパスに変換します。但し、”
\
” の代わりに “/
” が使われます。
$ cd ~/work/
$ echo $PWD
/mnt/c/Users/foo/work
$ wslpath -w $PWD
C:/Users/foo/work
(例)
引数: /mnt/c/Users/foo/work
↓
出力: C:/Users/foo/work
3. WSL を Windows Terminal で利用する場合
WSL を Windows Terminal で利用する場合、ターミナル上に Windows形式のパスを貼り付けても Linux形式に自動変換してくれません (Cmder なら自動変換してくれます)。※ 2020年7月時点
面倒ですが、wslpath コマンドを利用してパスを変換することならできます。
例えば、cd
コマンドでカレントディレクトリを移動したいのであれば、まず以下を記述します。
$ cd $(wslpath -u '')
この状態で、''
の中に Windows形式のパスを貼り付けます。
$ cd $(wslpath -u 'C:\Users\foo\Documents')
Enter キーを押して実行します。
$(コマンド)
はコマンドの実行結果に置き換わるので、上のコマンドは以下を実行することになります。
$ cd /mnt/c/Users/foo/Documents
4. おわりに
wlspath
コマンドを使う機会はあまりないかもしれません。しかしいざ必要な状況になった時には、なるべくすぐに存在を思い出して必要なオプションを調べたいものです。そんな時に本ページが役に立つと思います。