如何在 Windows 10 中的 ConEmu 中指定 WSL (Ubuntu) 的启动目录

Fre*_*sia 2 linux bash ubuntu conemu windows-subsystem-for-linux

我已经在 Windows 10 上安装了 WSL2,并成功下载并设置了 Ubuntu。

我已经安装并设置了 ConEmu 终端以成功运行 Ubuntu。

但是ConEmu在C:\Users\MyUsers中打开Ubuntu

我想在 Linux (Ubuntu) Home\MyUsers\MyProjectFolder 目录中启动

我尝试在 ConEmu - 设置 - 任务 - 6- Bash(或 7- Ubuntu)中使用这些命令,但没有一个起作用:

%windir%\system32\wsl.exe -cur_console:pm:/mnt --distribution Ubuntu -c "cd"
%windir%\system32\wsl.exe -cur_console:p -c "cd"
%windir%\system32\wsl.exe -cur_console:p -c "cd /home"
%windir%\system32\wsl.exe -cur_console:pm:/mnt --distribution Ubuntu -c "~"
set "PATH=%ConEmuBaseDirShort%\wsl;%PATH%" & %ConEmuBaseDirShort%\conemu-cyg-64.exe --wsl -cur_console:pm:/mnt -C "~"
wsl.exe -cur_console:pm:/mnt -C "~"
Run Code Online (Sandbox Code Playgroud)

Not*_*1ds 5

简答

使用以下任一方法设置 ConEmu 任务:

  • %windir%\system32\wsl.exe -cur_console:pm:/mnt --cd \\wsl$\Ubuntu\home\MyUser\MyProjectFolder
  • -new_console:d:\\wsl$\Ubuntu\home\MyUser\MyProjectFolder %windir%\system32\wsl.exe -cur_console:pm:/mnt

细节

为了完整起见,我将重复之前为初学者删除的答案中的信息。即使它没有直接回答您的(更新的)问题,这里作为参考仍然很好。

有多种技术可用于指定 WSL 实例的起始目录:

  • 您可以使用(目前尚未记录wsl ~快捷方式直接启动到 WSL 用户的主目录。
  • 您可以使用(也未记录的)命令行启动到指定目录wsl --cd <WindowsDirectory>。请注意,这采用 Windows 样式的目录路径,而不是 Linux 路径。例如,wsl --cd C:\。要使用 WSL 实例内部的路径,您可以使用 Windows 的\\wsl$\<distroname>\path. 所以你/home/myuser/myproject会变成wsl --cd \\wsl$\Ubuntu\home\myuser\myproject(假设你的发行版/实例名称是“Ubuntu”)。
  • 您可以在启动 WSL 实例之前在父进程中设置目录。默认情况下,WSL 将启动到当前目录。例如,从 PowerShell:
    PS> Set-Location C:\ # a.k.a. "cd C:\"
    PS> wsl
    /mnt/c$ # Now inside WSL shell
    
    Run Code Online (Sandbox Code Playgroud) ConEmu 显然使用 Windows%userprofile%作为新任务的起始目录,这就是默认情况下您最终会进入的原因C:\Users\MyUser。这也是为什么上面的第二个选项(要求 ConEmu 设置起始目录)有效的原因。
  • 不推荐: cd到 shell 启动配置中的目录(例如.bashrc)。不推荐,因为如果您想在不同的目录中启动,它会删除使用任何其他选项的能力。前两种技术要灵活得多。
  • 不推荐:您还可以在执行命令的 ConEmu 任务中启动一个“外部”shell cd,然后执行一个新的“内部”子 shell(或者甚至用exec'd shell 替换自身)。例如:
    %windir%\system32\wsl.exe -cur_console:pm:/mnt --exec sh -c "cd /home/myuser/myproject; exec bash"
    
    Run Code Online (Sandbox Code Playgroud) 这不一定是一个方法。只是有时候启动两个 shell 感觉有点浪费。上面的前两种技术更好。但这个版本可以有它的用处。例如,我经常在 Windows 终端中以这种方式启动 WSL 实例,以便在sh启动 into 之前设置一些环境变量tmux,然后fish在每个窗口中启动 shell。