在 Windows 终端中运行该命令ubuntu
会将目录设置为 linux 默认值,但运行wsl
会导致它挂载在/mnt/%USERPROFILE%
. 我知道我可以直接运行ubuntu
,但我习惯于使用wsl
。我检查了我的 Windows 终端配置,这很好(没有定义的目录,使用下拉菜单设置为~
)。对不起,如果这听起来令人困惑,因为我对 wsl 还比较陌生。终端直到最近才表现得像这样。设置StartingDirectory
还是CommandLine
不行。这个问题可能更多地与 WSL 有关而不是 Ubuntu
重现步骤
- 打开 Windows 终端
- 输入命令
wsl
预期行为
打开 Ubuntu WSL~
实际行为
在中打开 Ubuntu WSL/mnt/c/users/<username>
虽然无法更改运行时输入的默认
wsl.exe
目录(有充分的理由,请参见下文),但最好的解决方法是简单地运行wsl ~
,它将在默认用户的主目录中启动。对于 Windows 终端,您可以将配置文件的“命令行”设置设置为wsl ~
,这将覆盖“起始目录”。更多说明:
当任何可执行文件在 Windows(或 Linux)下启动时,它从启动它的应用程序继承“当前工作目录”。它可以(并且经常)在启动期间设置一个新的工作目录。
和命令在设计上略有不同
wsl.exe
:ubuntu.exe
wsl.exe
旨在安装、修改或启动 WSL 本身ubuntu.exe
旨在安装、修改或启动 Ubuntu 发行版。与大多数“预打包”的 WSL 发行版一样,ubuntu.exe
它基于Microsoft 提供的 WSL 发行版启动器参考实现。这是 Ubuntu 安装程序/启动程序的分叉版本。您可以检查发行版启动器的源代码并找到
WslApiLoader::WslLaunchInteractive
具有useCurrentWorkingDirectory
布尔参数的源代码。这将传递给 (closed-source) 中的等效函数wslapi.dll
。该 API 依次启动 Ubuntu 和(通过其init
功能):~
如果上述参数为false
,否则为父进程工作目录)ubuntu.exe
是启动 Ubuntu 的“简易按钮”版本。它没有为用户提供太多额外的控制。wsl.exe
,另一方面,有相当多的命令行参数,允许您准确控制启动什么以及如何启动,包括:wsl ~
(在主目录中启动的快捷方式)或wsl --cd <directory>
wsl -u <username>
)wsl -e <command>
)这是一个简单的示例,说明为什么您应该希望命令
wsl.exe
默认为当前工作目录。从 PowerShell:这将(如本回答中所述)在目录列表中向您显示人类可读的文件大小,否则在 PowerShell 中很难做到这一点。
如果
wsl.exe
默认为主目录,等效命令将为您提供该目录中的文件列表,而不是当前的 PowerShell 目录。能够
wsl
直接在 PowerShell 中使用 Linux 命令是非常灵活和强大的。出于类似的原因,我建议不要修改
~/.bashrc
以更改目录。