改进了Gábor的答案,因为我发现它有一个小bug,以这种方式获取的变量包含不可见的回车符号,可能会在后面引起意外问题。
以下是示例:
$ cd /mnt/c/
$ mkdir Windows_NT
$ tmpvar=`/mnt/c/Windows/System32/cmd.exe /C "echo %OS%"`
$ echo $tmpvar
Windows_NT
一切似乎都很好,但实际上并不是这样:
$ cd $tmpvar
: No such file or directory
这是因为 tmpvar 变量包含额外的回车字符 (也称为 ^M 或 \r)。我们可以通过 ls 命令来检查:
$ ls -ld $tmpvar
ls: cannot access 'Windows_NT'$'\r': No such file or directory
为了去除该字符,输出可以使用sed或tr进行额外处理:
tmpvar=$(cmd.exe /C echo %OS%|sed $'s/\r$//')
或者
tmpvar=$(cmd.exe /C echo %OS%|tr -d '\r')
我还对命令进行了简化。在最近的Windows 10更新中,默认情况下$PATH WSL变量已经包含路径/mnt/c/Windows/System32,因此只需要使用cmd.exe。
现在,ls和cd命令可以正常运行,没有错误:
$ ls -ld $tmpvar
drwxrwxrwx 1 ubuntu ubuntu 512 Feb 12 05:38 Windows_NT
$ cd $tmpvar
$ pwd
/mnt/c/Windows_NT
pwd 命令确认当前目录是否正确。