如何将带空格的路径传递给 Windows Terminal 的 WSL

如何将带空格的路径传递给 Windows Terminal 的 WSL

我想在特定路径启动 WSL /mnt/c/Users/My User/repos。我们可以wsl.exe ~从主目录启动,但我似乎无法传递其他路径。

我可以将路径包装成转义字符串,但 WSL 不会将字符串作为默认参数,因此wsl.exe \"/mnt/c/Users/My User/repos\"不起作用。

没有接受字符串的-p或选项,我已经查看了--pathWSL 选项 和 WSL 错误/帮助 CLI 但尚未找到解决方案。

{
    "colorScheme": "One Half Dark",
    "commandline": "wsl.exe '/mnt/c/Users/My User/repos' -d Ubuntu-20.04",
    "icon": "\ud83d\udc40",
    "name": "My Windows Terminal Profile",
    "tabTitle": "Windows Terminal"
}

我曾尝试过:

/mnt/c/Users/My\\ User/repos
'/mnt/c/Users/My\\ User/repos'
\"/mnt/c/Users/My\\ User/repos\"

并得到/bin/bash: /mnt/c/Users/My\ User/repos: No such file or directory

我也尝试过/mnt/c/Users/My\ User/repos不使用引号、单引号'和转义双引号\" ,JSON 解析器显示Invalid escape character in string. [jsonc(261)]

答案1

它有点不直观,并且与选项一样没有文档记录~,但wsl --cd听起来像是你正在寻找的。它实际上需要一个视窗路径规范,而不是 WSL/Linux 形式。所以:

wsl --cd "C:\Users\My User\repos"

如果您使用 Windows 终端设置 UI,那么它将自动在中为您提供正确的引用,settings.json即:

{
  "commandline": "wsl --cd \"C:\\Users\\My User\\repos"",
  "name": "Profile Name"
}

只是为了好玩,这里有一个替代的、黑客的方法,你真的永远不需要使用,因为该--cd选项是非黑客的、更好的方法:

wsl --exec bash -c "cd /mnt/c/Users/My\ User/repos; exec bash"

虽然对于这种特殊情况来说这不是最好的选择,但它确实展示了在执行 shell 之前编辑环境(在本例中)的能力PWD。这有时很有用。

答案2

自答

最后,我没能按照我预期的方式解决我的问题,但是这个方法有效:

{
    "commandline": "wsl.exe -d Ubuntu-20.04",
    "startingDirectory": "%USERPROFILE%/repos",
}

相关内容