在 Windows 上的特定或当前文件夹中启动 WSL Ubuntu

Posted

技术标签:

【中文标题】在 Windows 上的特定或当前文件夹中启动 WSL Ubuntu【英文标题】:Start WSL Ubuntu in specific or current folder on Windows 【发布时间】:2018-09-06 15:38:49 【问题描述】:

在他的开发机器上从商店安装 Linux 和 Ubuntu 子系统时,我可以简单地切换(或启动)到 Ubuntu shell

但默认情况下,Ubuntu shell 在/home/techsupp 文件夹中启动。是否可以强制它在与我使用Ubuntu 命令的文件夹相同的文件夹中启动?

所以在我的例子中我应该在

/mnt/h

谢谢。

我已经尝试过的:

H:\>ubuntu help
Launches or configures a linux distribution.

Usage:
    <no args>
      - Launches the distro's default behavior. By default, this launches your default shell.

    run <command line>
      - Run the given command line in that distro, using the default configuration.
      - Everything after `run ` is passed to the linux LaunchProcess call.

    config [setting [value]]
      - Configure certain settings for this distro.
      - Settings are any of the following (by default)
        - `--default-user <username>`: Set the default user for this distro to <username>

    clean
      - Uninstalls the distro. The appx remains on your machine. This can be
        useful for "factory resetting" your instance. This removes the linux
        filesystem from the disk, but not the app from your PC, so you don't
        need to redownload the entire tar.gz again.

    help
      - Print this usage message.

我也在 uservoice 上发现了这个请求:https://wpdev.uservoice.com/forums/266908-command-prompt-console-windows-subsystem-for-l/suggestions/13421103-let-us-right-click-open-bash-here-from-explorer?tracking_code=8a8bc624c72a8336565fcd6d5737d712

请为它投票。

【问题讨论】:

【参考方案1】:

第一步:安装Windows Terminal

第 2 步:转到要在其中打开 ubuntu 的文件夹,然后右键单击打开 Windows Terminal。

第 3 步:转到 Windows 终端设置并导航到您的 Linux 发行版(在我的情况下为 Ubuntu 20.04)并选中此选项。

现在每次通过 Windows 终端打开 ubuntu 时,它都会在该目录中打开。

【讨论】:

【参考方案2】:

如果您的默认终端是Ubuntu,那么您可以轻松地在当前目录中打开Ubuntu

点击文件资源管理器的地址栏

或者您可以使用键盘快捷键alt+d

有类型

wt -d .

如果默认为Ubuntu,它将在该路径上打开Ubuntu,或者您也可以键入

ubuntu run 

不管默认终端是不是Ubuntu,它都会在那里打开ubuntu,无论如何。

【讨论】:

【参考方案3】:

现代解决方案

    安装windows terminal,来自Microsoft store

    继续设置

    安装 ubuntu 后,您会在配置文件列表中看到它,然后单击打开 json

    打开cmd,输入wsl,输入cd,输入pwdwslc,然后复制路径[!

    并将其放入 json 文件中,在 ubuntu 配置文件中,startingDirectory

注意: 我使用 linux 主目录作为 ubuntu 使用的默认目录。因此,如果您觉得您有其他想要使用的目录,可以将其替换为 /home/claranceliberi 到您自己的首选目录

【讨论】:

【参考方案4】:

我在带有 May Update 的 Windows 10 Home 上并安装了 Ubuntu 18.04 for WSL,我可以使用 Shift + 右键单击​​ 在任何文件夹中打开控制台并选择 Open Linux shell这里选项

【讨论】:

如果有帮助,我已经创建了一个您可以运行的注册表文件,使用 右键单击 来执行此操作,而不是 Shift + 右键单击​​ .如果您按照顶部的说明进行操作,它还会在上下文菜单中显示 Ubuntu 图标。 gist.github.com/Zantier/692fd3e1a28d54708e95921de9b27e67 这对我不起作用。 (见@Liu 回答)。如果您已经安装了两个或多个发行版(例如 Ubuntu 和 Fedora),默认的发行版将会启动。您可以通过运行 wslconfig /setdefault Ubuntu 将默认设置为 Ubuntu。显然我默认使用了 Fedora,我的所有命令(我只安装在 Ubuntu 中)都不起作用:( 哇?? 谢谢!【参考方案5】:

首先,您必须检查wsl 是否默认使用ubuntu。 对我来说不是。在 cmd 上写入以下命令:

wsl -l

Like this

如果没有,则写入wsl -s Ubuntu-20.04 将其设置为默认值。 现在您可以通过 shift + Rightclick 从任何目录运行 ubuntu bash,如图所示 Here。

【讨论】:

【参考方案6】:

对我有用的方法是使用 Windows 终端应用程序并将其配置为在所需位置启动。

基于 WSL2 和 Ubuntu 20.04 的示例:

settings.json - 将此行添加到“Ubuntu-20.04”部分:

    "startingDirectory": "//wsl$/Ubuntu-20.04/home/<username>/"

更改为您在安装 Ubuntu 20.04 时创建的用户名。

【讨论】:

好信息,但应该注意的是,此答​​案仅适用于使用 Windows 终端的人(您应该编辑答案以反映这一点)。最初的问题没有说明他们使用的是 Windows Terminal.. 好点!已编辑答案以反映这一点。 这正是我想要的。为什么不使用 Windows 终端? :)(说真的,有更好的东西吗?因为到目前为止看起来很酷)【参考方案7】:

如果您在任务管理器中查看资源管理器“在此处打开 Linux shell”选项如何打开 wsl,您可以看到有一个“--cd”选项。

【讨论】:

我发现这是从命令行最有用(正确?)的方法,谢谢! 很好的答案和很好的发现!基于此,还请注意,您可以通过 wsl.exe --cd "\\wsl$\&lt;distroName&gt;" 开始 WSL 路径(将从 / 开始)。我只是希望--cd 选项记录在wsl --help 中。 @NotTheDr01ds 实际上 -- 选项已记录,请参阅 wsl --help: -- Pass the remaining command line as is. @klapshin 我想您可能会看到我没有放的换行符或空格;-)。我知道 -- 已记录在案。我说我希望--cd 被记录在案。 --cd 是 wsl 命令的实际 标志,而不是作为 -- 的结果传递的 cd 命令(如果是这样,它后面需要一个空格)。 @klapshin 不用担心。你是对的,-- cd(带空格)会将cd 命令传递到 wsl 会话,但结果是它会cd,然后立即退出,因为这将是发送到的唯一命令壳。【参考方案8】:

似乎有一个非常简单的解决方案。

只需在profiles.json文件中的Ubuntu配置中添加以下内容

“命令行”:“wsl ~ -d Ubuntu”,

【讨论】:

它并不能完全回答 OP 问题,但这是一个很好的提示。知道wsl ~ 记录在哪里或为什么有效吗?显然 ~ 正在作为命令行传递给 shell,但它似乎与其他命令行不同。例如,wsl ls 将执行 ls 并退出,而 wsl ~ 让 shell 运行。此外,从另一个 shell(而不是通过 wsl)启动 shell 时,我也无法重现相同的行为。 这就是我想知道的。 ~ 有什么特别之处,我们可以使用它启动到不同的起始目录或任何其他行为吗?【参考方案9】:

使用这个小脚本,您可以从 Powershell 当前所在的目录执行每个命令。它仅在驱动器已安装到子系统中的 /mnt/ 时才有效。它不适用于网络资源。

function tux $dl = (pwd).Path | wsl eval "cut -c 1 | tr 'A-Z' 'a-z'"; $wd = (pwd).Path | wsl eval "cut -d : -f 2 | tr '\\' '/' 2> /dev/null" ; wsl eval "cd '/mnt/$dl$wd' && eval '$args'"

在你执行之后,你可以这样使用它:

tux vim test.txt

【讨论】:

现在这看起来很愚蠢 XD。那时需要这样的东西。感谢用户的声音。现在好多了。【参考方案10】:
ubuntu run

运行 在当前工作目录中运行提供的命令行。如果没有 提供命令行,启动默认shell。

据我所知,效果与运行ubuntu 相同,只是它从当前目录开始。

此命令甚至可以作为资源管理器中的右键单击在此处打开命令。改编自this article:

RegEdit 到 HKEY_CLASSES_ROOT\Directory\Background\shell 并创建一个新密钥 将 (Default) 编辑为“在此处打开 Ubuntu”或类似内容。 添加一个名为command的键 将(Default) 编辑为ubuntu run

现在您在资源管理器中有一个功能性的“在此处打开 Ubuntu”右键菜单。


wsl 的问题是 wsl bash 窗口没有 Ubuntu 图标,即使它启动了 Ubuntu 发行版。

【讨论】:

这是在我最初提出问题几个月后添加的一项功能。谢谢。 对于 Windows 10,我放了一个这样的 Ubuntu 图标:WSL\command -> key Icon -> Value "%ProgramFiles%\WindowsApps\CanonicalGroupLimited.UbuntuonWindows_1804.2018.817.0_x64__79rhkp1fndgsc\ubuntu.exe",0 请注意,有些用户可能需要将ubuntu run 替换为wsl.exe。否则将找不到应用程序。 这是一个您可以运行的注册表文件,它还允许您右键单击文件夹以在该文件夹中打开 bash。如果您按照顶部的说明进行操作,它还会将 Ubuntu 图标添加到上下文菜单中。不过,窗口本身没有 Ubuntu 图标。 gist.github.com/Zantier/692fd3e1a28d54708e95921de9b27e67【参考方案11】:

如果你使用wsl.exe,它将在当前目录启动WSL。但是wslubuntu 之间的区别在于,如果您安装了两个或多个发行版(例如,Ubuntu 和 Fedora),默认的发行版将启动。您可以通过运行 wslconfig /setdefault Ubuntu 将默认设置为 Ubuntu。

参考:[1]https://docs.microsoft.com/en-us/windows/wsl/wsl-config

【讨论】:

bash.exe 仅在当前密码位于我的 C:/ 驱动器上时才在当前目录中启动。否则它会从我家开始。 谢谢,当终端在启动后立即消失时,这有助于解决问题(因为我默认设置了 docker WSL)

以上是关于在 Windows 上的特定或当前文件夹中启动 WSL Ubuntu的主要内容,如果未能解决你的问题,请参考以下文章

如何从Windows服务启动进程到当前登录的用户会话

如何在 Windows 上的多个进程上存储持久设置

在 ASP.NET 中以不同用户身份启动进程

把linux上的文件拷贝到windows下

关闭当前窗口快捷键ctrl加啥

如何从 Windows 服务启动进程到当前登录的用户会话