如何更改 Linux 的 Windows 子系统中的默认目录

d.l*_*a38 3 windows-subsystem-for-linux

我刚刚安装了适用于 Linux 的 Windows 子系统,它似乎总是在我的 Windows 主目录中打开一个新终端 -/mnt/c/Users/dl我试图将其默认为 linux 主目录 - /home/dl

我检查了 Linux 子系统中的主目录,/etc/passwd并正确设置了它:

dl:x:1000:1000:,,,:/home/dl:/bin/bash
Run Code Online (Sandbox Code Playgroud)

然后我遇到了这个解决方案,但它似乎没有任何影响:

// Set starting directory
"startingDirectory": "\\\\wsl$\\Ubuntu\\home\\dl\\"
Run Code Online (Sandbox Code Playgroud)

我知道我可以cd ~在我的点文件中运行(这是我目前正在使用的),但我正在寻找一种方法,/home/dl它只是默认值而cd ~不是需要。这可能吗?

小智 24

在 Windows 10 21H2 或更高版本以及 Windows 11 中,现在要简单得多。根据微软文档

在较新版本的 Windows 上,startingDirectory可以接受 Linux 样式的路径。

这意味着您可以简单地使用:

"startingDirectory": "/home/yourusername"
Run Code Online (Sandbox Code Playgroud)

Windows 目录结构不需要任何前缀,也不需要转义反斜杠。只是普通的旧 Linux 正斜杠表示法。

这适用于 WSL1 和 WSL2。

注意:我尝试使用“~”但失败了。可能有一些方法可以使用 {$USERPROFILE},但还没有尝试过。

  • 您的代码片段似乎是 json,这个 json 文件在哪里? (2认同)

Sha*_*yar 9

使用 WSL 更改主目录的方式与在 Linux 中相同:

  1. 输入bash
  2. 键入命令 sudo vim /etc/passwd
  3. 找到您帐户的行,可能类似于:
    shadyar:x:1000:1000:"",,,:/home/shadyar:/bin/bash
  4. 使用 WSL 将主目录(上面的 /home/shadyar)更改为新目录
    注意:如果要将 Windows 目录设置为主目录,则需要在其前面加上 /mnt/,例如 C 的 /mnt/c :/、/mnt/d 表示 D:/ 等
  5. 输入 :wq 并按 Enter 键保存文件并退出 vim
  6. 退出 bash 并重新启动它
  7. 要测试,请使用命令:
    cd ~
    pwd


Not*_*1ds 8

这里的其他答案(尤其是来自 @TomBoland 的最新答案)非常适合从任意目录开始,但您问题中的示例是从您的主目录开始。最简单的方法就是创建属性或将"commandline"属性更改为wsl ~. 这是 的一个未记录的标志wsl.exe,并且它必须是第一个参数(例如wsl ~ -u root)。

当前和最新的 Windows 终端版本

由于 Windows 终端现在有一个用于设置的 GUI,因此您只需编辑您的配置文件以指向wsl ~- > 常规 -> 命令行设置。

较旧的 Windows 终端版本,或者如果您想手动编辑

如果您settings.json直接编辑(当前在 中找到%userprofile%\AppData\Local\Packages\MicrosoftWindowsTerminal...\LocalState\settings.json,但这可能会改变)...

删除该"source"属性并将其替换为"commandline"

"guid": "{2d5ef231-38b7-51cf-b940-2309a097f644}",
"hidden": false,
"name": "Ubuntu",
//"source": "Windows.Terminal.Wsl",
"commandline": "wsl ~",
"startingDirectory": "//wsl$/Ubuntu/",
"tabTitle": "Ubuntu"
Run Code Online (Sandbox Code Playgroud)

另外,为了好玩,这里有一种将 WSL 打开到~/ 的替代(hacky)方法$HOME(无需像其他答案那样进行硬编码)。这绝对不需要,因为它更容易使用wsl ~,但是:

wsl -e sh -c 'cd $HOME; exec $SHELL'
Run Code Online (Sandbox Code Playgroud)

这将启动sh,将目录更改为$HOME,然后exec您就$SHELL可以替换sh.


Dun*_*moo 5

您应该只更改startingDirectoryWSL(在本例中为 Ubuntu)终端会话。

  1. 打开settings.json通过CTRL+ SHIFT+,
  2. 确保您正在修改startingDirectoryprofiles/list/name: "Ubuntu"

下面的例子(斜线需要转义):

....
{
    "guid": "{2c4de342-xxx-xxx-xxx-2309a097f518}",
    "hidden": false,
    "name": "Ubuntu",
    "source": "Windows.Terminal.Wsl",
    "startingDirectory": "\\\\wsl$\\Ubuntu\\home\\windows_username_in_lower_case"
},
....
Run Code Online (Sandbox Code Playgroud)

有关startingDirectory包括默认值和预期值的文档。

在里面settings.json你还会发现这里的 json 模式的解释

如果您需要知道如何或在何处编辑 Windows 终端设置/首选项:https : //docs.microsoft.com/en-us/windows/terminal/get-started

  • 我认为这个答案缺少一些东西,因为我安装了 WSL2 并且系统中没有安装 Windows 终端。我真的不想只是为了解决这个问题而安装它。所以这个修复对我不起作用=/。更准确地说:使用 CTRL + Shift + 在我的 WSL 终端上不执行任何操作,并且在 Windows 上搜索“Windows Terminal”不会产生任何结果。 (3认同)

Bab*_*abi 5

如果您使用带有 WSL 的Windows 终端,那么最简单的解决方案是通过“设置”菜单配置起始目录: 在此输入图像描述

进而: 在此输入图像描述