如何将 WSL 默认路径设置为 ~(Ubuntu)

如何将 WSL 默认路径设置为 ~(Ubuntu)

在 Windows 终端中运行该命令ubuntu会将目录设置为 linux 默认目录,但运行wsl会导致它挂载在/mnt/%USERPROFILE%。我知道我可以直接运行ubuntu,但我习惯使用wsl。我检查了我的 Windows 终端配置,这很好(没有定义目录,使用下拉菜单设置为~)。如果这听起来可能令人困惑,我很抱歉,因为我对 wsl 还比较陌生。直到最近,终端才像这样运行。设置StartingDirectoryCommandLine不起作用。这个问题可能与 WSL 比与 Ubuntu 更相关

重现步骤

  1. 打开 Windows 终端
  2. 输入命令wsl

预期行为

在以下位置打开 Ubuntu WSL~

实际行为

在以下位置打开 Ubuntu WSL/mnt/c/users/<username>

答案1

虽然没有办法改变默认运行时输入的目录wsl.exe(有充分理由,见下文),最好的解决方法是简单地运行wsl ~,它将从默认用户的主目录中启动。对于 Windows 终端,您可以将配置文件的“命令行”设置设置为wsl ~,这将覆盖“起始目录”。

更多解释:

什么时候任何可执行文件在 Windows(或 Linux)下启动时,会从启动它的应用程序继承“当前工作目录”。它可以(并且通常会)在启动期间设置新的工作目录。

wsl.exe和命令ubuntu.exe在设计上略有不同:

  • wsl.exe旨在安装、修改或启动 WSL 本身
  • ubuntu.exe旨在安装、修改或启动 Ubuntu 发行版。与大多数“预打包”的 WSL 发行版一样,ubuntu.exe它基于WSL 发行版启动器参考实现由微软提供。 这里是 Ubuntu 安装程序/启动器的分叉版本。

您可以检查 distro-launcher 的源代码,并找到WslApiLoader::WslLaunchInteractive具有useCurrentWorkingDirectory布尔参数的。这将传递给 (closed-source) 中的等效函数wslapi.dll。该 API 依次启动 Ubuntu 并(通过其init函数):

  • 确定默认用户
  • 看看他们的壳
  • 在指定目录中启动 shell(~如果上述参数为false,则为父进程的工作目录)
  • (以及更多)

ubuntu.exe是启动 Ubuntu 的“简易按钮”版本。它没有为用户提供更多额外的控制。

wsl.exe另一方面,有相当多的命令行参数允许您精确控制启动的内容和启动方式,其中包括:

  • 启动目录,可以通过wsl ~(在主目录中启动的快捷方式)或wsl --cd <directory>
  • 以不同用户身份启动的能力(wsl -u <username>
  • 可以跳过启动默认 shell 并在其位置运行命令 ( wsl -e <command>)
  • 和更多

这是一个简单的例子,说明为什么你应该wsl.exe命令默认为当前工作目录。从 PowerShell:

wsl ls -lh

这将(如在这个答案)向您展示人类可读目录列表中的文件大小,否则在 PowerShell 中很难做到这一点。

如果wsl.exe默认为主目录,则等效命令将为您提供以下文件列表:目录,而不是当前 PowerShell 目录。

能够直接在 PowerShell 中使用 Linux 命令wsl非常灵活且功能强大。

出于类似的原因,我建议不要~/.bashrc修改您的目录。


选择:

虽然wsl ~很短(5 个字符,仍然比 少 1 个ubuntu),但您也可以wslh在 PowerShell 中将其“别名”为类似(甚至更短)的内容。但是,由于 PowerShell 别名不支持参数,因此您需要向 中添加一个函数profile.ps1。例如:

function wslh {
    wsl ~ @args
}

这将允许您使用wslh从主目录启动。您仍然可以使用类似wslh -u root -d Ubuntu-22.04 -e ls(et. al.) 的参数。

相关内容