Windows Server 2019 (17763.6189)上の WSL で wslpath: Invalid argument が出て困るので対策しました。
WSL のディストリビューションの一つ、Fedora Remix for WSL を利用しています。
暫定対策
後半で調査はしていますが、現状エラーメッセージが表示される以外に影響が出ていないため、wslpath のエラー出力を /dev/null にリダイレクトするようなスクリプトを配置しました。
$ mkdir ~/bin/
$ vim ~/bin/wslpath
#!/bin/bash
/usr/bin/wslpath ${1} "${2}" 2> /dev/null
$ chmod 700 ~/bin/wslpath
wslpath の実態
確認すると、/usr/bin/wslpath から /init にリンクする形で WSL 側のコマンドを実行しているようでした。
$ which wslpath
/usr/bin/wslpath
$ ls -l /usr/bin/wslpath
lrwxrwxrwx 1 root root 5 Aug 18 23:30 /usr/bin/wslpath -> /init
また、wslpath コマンドのヘルプは下記の通りです。
内容は Windows Server 2019 も Windows 11 も同一でした。
$ /usr/bin/wslpath
/usr/bin/wslpath: Invalid argument
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'
原因調査のためのスクリプト設置
パスが分かったので、ユーザーのホームディレクトリに wslpath をラップするスクリプトを置いてみます。
$ cat ~/bin/wslpath
#!/bin/bash
/usr/bin/wslpath ${1} "${2}"
echo wslpath ${1} "${2}" >> /var/log/wslpath.log
~/bin/wslpath と /var/log/wslpath.log に適切なパーミッションを付与するとログが出力されます。
$ sudo touch /var/log/wslpath.log
$ sudo chmod 666 /var/log/wslpath.log
wslpath の挙動の調査
上記のスクリプトで出力されたログより、
wslpath -w /var/log
が実行されているようですので、Windows Server 2019 と Windows 11 で挙動の違いを見てみます。
Windows 11
$ wslpath -w /var/log
\\wsl.localhost\fedoraremix\var\log
Windows Server 2019
$ /usr/bin/wslpath -w /var/log
/usr/bin/wslpath: /var/log: Invalid argument
また、wslpath -w が全く使えないというわけではなく、/mnt/c など Windows のパスについては Server 2019 でも正しい結果を返してきます。
$ /usr/bin/wslpath -w /mnt/c
C:\
まとめ
以前のバージョンの wslpath コマンドでは実装されていない機能を Fedora Remix for WSL 側で実行されているのが原因のようです。
本件については、Fedora Remix for WSL 側にも Issue を立てています。
根本解決がされるまではこの暫定スクリプトを仕込むしかなさそうです。