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

How to change default directory in Windows Subsystem for Linux

我正在设置我的开发环境,所以我刚刚为 Linux 安装了 Windows 子系统,它似乎总是在我的 Windows 主目录中打开一个新终端 - /mnt/c/Users/dl 并且我正在尝试将其默认设置为 linux 主目录 - /home/dl.

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

dl:x:1000:1000:,,,:/home/dl:/bin/bash

然后我发现了这个solution,但它似乎没有任何影响:

// Set starting directory
"startingDirectory": "\\wsl$\Ubuntu\home\dl\"

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

startingDirectory 应该是 windows 路径,而不是 nix 路径。尝试 D:\Folder\SubFolder 而不是

参考这个 link,对我有用

github

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

  1. 通过CTRL+SHIFT+,[=39打开settings.json =]
  2. 确保您在 profiles/list/name: "Ubuntu"
  3. 下修改 startingDirectory

示例如下(斜线需要转义):

....
{
    "guid": "{2c4de342-xxx-xxx-xxx-2309a097f518}",
    "hidden": false,
    "name": "Ubuntu",
    "source": "Windows.Terminal.Wsl",
    "startingDirectory": "\\wsl$\Ubuntu\home\windows_username_in_lower_case"
},
....

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

settings.json 中,您还将找到 json 模式的解释,即 here

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

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

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

第 1 步:打开 windows 命令提示符并键入“bash” 或直接打开 Linux 应用程序。

第 2 步:键入如下所示的路由:/mnt/c/Users/HP/..(您可以在此处输入所需的目录)。

例如:/mnt/c/Users/HP/Documents,这样你就进入了Documents.

对于 WSL2 Ubuntu,语法现在应该与 json 中的以下示例匹配:

      "guid": "{2d5ef231-38b7-51cf-b940-2309a097f644}",
      "hidden": false,
      "name": "Ubuntu",
      "source": "Windows.Terminal.Wsl",
      "startingDirectory": "//wsl$/Ubuntu/",
      "tabTitle": "Ubuntu"

To start in /: "startingDirectory": "//wsl$/Ubuntu/",
To start in /root: "startingDirectory": "//wsl$/Ubuntu/root/",
To start in /home: "startingDirectory": "//wsl$/Ubuntu/home/",

在Windows10 21H2 或更高版本和Windows11 中,现在要简单得多。根据 the Microsoft Doc:

On newer versions of Windows, startingDirectory can accept Linux-style paths.

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

"startingDirectory": "/home/yourusername"

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

这适用于 WSL1 和 WSL2。

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

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

当前和最近的 Windows 终端版本

由于 Windows 终端现在有一个用于设置的 GUI,您只需在 ->常规->命令行[=49] 中编辑您的配置文件以指向 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"

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

wsl -e sh -c 'cd $HOME; exec $SHELL'

这会启动 sh,将目录更改为 $HOME,然后 exec$SHELL 替换 sh

无需执行任何操作,只需在设置下打开 Ubuntu 的配置文件,然后更新命令行以添加以下选项

C:\Windows\system32\wsl.exe -d Ubuntu --cd ~

如果您将 Windows Terminal 与 WSL 一起使用,那么最简单的解决方案是通过“设置”菜单配置起始目录:

然后: