vvx*_*ues 7 command-line ubuntu windows-subsystem-for-linux windows-terminal wsl2
在 Windows 终端中运行该命令ubuntu会将目录设置为 linux 默认目录,但运行wsl会导致其挂载在/mnt/%USERPROFILE%. 我知道我可以直接运行ubuntu,但我习惯了使用wsl。我检查了我的 Windows 终端配置,结果很好(没有定义目录,使用下拉菜单设置为~)。如果这听起来令人困惑,我很抱歉,因为我对 wsl 还比较陌生。直到最近,终端才出现这样的行为。设置StartingDirectory或CommandLine不起作用。这个问题可能更多地与 WSL 有关,而不是与 Ubuntu 有关
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布尔参数的代码。这被传递给 (闭源) 中的等效函数wslapi.dll。该 API 反过来启动 Ubuntu 并(通过其init功能):
~如果上述参数为false,否则为父进程工作目录)ubuntu.exe是启动 Ubuntu 的“简单按钮”版本。它没有为用户提供太多额外的控制。
wsl.exe另一方面,它有相当多的命令行参数,允许您准确控制启动的内容和方式,包括:
wsl ~(在主目录中启动的快捷方式)或wsl --cd <directory>wsl -u <username>)wsl -e <command>)下面是一个简单的示例,说明了为什么您应该希望该wsl.exe命令默认为当前工作目录。来自 PowerShell:
wsl ls -lh
Run Code Online (Sandbox Code Playgroud)
这将(如本答案中所述)向您显示目录列表中人类可读的文件大小,否则在 PowerShell 中不容易做到这一点。
如果wsl.exe默认为主目录,则等效命令将为您提供该目录中的文件列表,而不是当前的 PowerShell 目录。
能够wsl直接在 PowerShell 中使用 Linux 命令非常灵活且强大。
出于类似的原因,我建议不要~/.bashrc修改目录。
选择:
虽然wsl ~它非常短(5 个字符,仍然比 少 1 个ubuntu),但您也可以在 PowerShell 中将其“别名”为类似wslh(甚至更短)的名称。但是,由于 PowerShell 别名不支持参数,因此您需要向profile.ps1. 就像是:
function wslh {
wsl ~ @args
}
Run Code Online (Sandbox Code Playgroud)
这将允许您使用wslh在主目录中启动。您仍然可以使用像wslh -u root -d Ubuntu-22.04 -e ls(et. al.) 这样的参数。
| 归档时间: |
|
| 查看次数: |
9920 次 |
| 最近记录: |