【问题标题】:What is the difference between Bash and Ubuntu terminals on Windows 10Windows 10 上的 Bash 和 Ubuntu 终端有什么区别
【发布时间】:2018-06-22 12:05:55
【问题描述】:

我最近安装了适用于 Windows 的 Ubuntu,现在开始菜单中有 2 个新项目:

重击 Bash 此终端在以下位置打开:

root@myName-PC:/mnt/c/Windows/System32#

Ubuntu Ubuntu 此终端在以下位置打开:

root@myname-PC:~#

两者有什么区别?

例如,我们想要安装 Git 和 Utils、RVM (Ruby),然后克隆一个 Git 项目并使用 Capistrano 命令通过 SSH 进行部署。应该像上面那样使用 Bash 或 Ubuntu 运行吗?

另外,在终端中,命令应该在 system32 或 C:/ 文件夹中运行吗?

谢谢

【问题讨论】:

    标签: bash ubuntu windows-10 windows-subsystem-for-linux


    【解决方案1】:

    Bash 终端是旧样式(在 Windows 10 v1790 又名 Fall Creator Update 之前)。它位于%LocalAppData%\Lxss 并使用lxrun.exe 进行管理。

    Ubuntu 终端是新样式,从 Microsoft Store 下载。启动器部分是一个 Windows 应用程序 (%ProgramFiles%\WindowsApp),其数据位于 %LocalAppData%\Packages

    这是两个独立安装的 Windows 子系统 for Linux,互不干扰。实际上,您只需要其中一种,因此请根据自己的喜好选择一种。

    我个人不喜欢 Windows 应用商店版本,因为它很容易被删除,这对于生产力环境来说不是一件好事。

    【讨论】:

      【解决方案2】:

      我试图删除 旧版“Windows 上的 Bash”,但未能成功,因为我的系统中没有 lxrun.exe。但如果有人需要,here's how:

      如果您愿意,您可以手动删除您的旧实例。如果您在使用 lxrun.exe 卸载旧版发行版时遇到问题,或者正在运行不附带 lxrun.exe 的 Windows 10 Spring 2018 更新(或更高版本),则可能需要这样做。

      要强制删除旧版 WSL 发行版,请使用 Windows 的文件资源管理器或命令行删除 %localappdata%\lxss\ 文件夹(及其所有子内容):(使用 PowerShell)

      rm -Recurse $env:localappdata/lxss/
      

      【讨论】:

        【解决方案3】:

        git bash 与 Ubuntu bash。

        除了 bash 的版本之外,基本上没有什么不同。因为 bash 就是 bash。很可能在不同的时间出于不同的目的在 PC 上安装了不同版本的 bash。它们也很可能在 PC 上的不同文件夹中找到。

        从两个不同的 shell 运行以下代码。这将返回 bash 的版本:

        echo "$BASH_VERSION"
        

        在这台 PC 上,使用两个终端(MinGW 和 Ubuntu)返回以下版本的 bash:(见下面的图片链接)

        5.0.17(1) - release
        4.4.23(1) - release
        

        大多数使用 PC 已有一段时间的人可能会发现他们的 PC 上安装了两个(或更多)不同版本的 bash。在这台 PC 上,旧版本的 bash 早在一段时间前就已安装。

        在这台 PC 上安装 Cygwin 时,可能已经安装了旧版本的 bash。或者可能是很久以前安装 Git 时安装了旧版本的 bash。现在真的无所谓了。在这台 PC 上,至少可以在以下位置找到 bash:

        C:\cygwin64\bin\bash.exe
        
        C:\Program Files\Git\bin\bash.exe
        
        C:\Program Files\Git\git-bash.exe
        

        此 PC 上的 Windows 10 已更新。具体来说,WSL 内核已从 WSL 更新到 WSL2。此更新的一部分涉及开启一些 Windows 功能,包括:适用于 Linux 的 Windows 子系统。

        有一个旧(虚拟)版本的 Ubuntu (18.04) 已安装在这台 PC 上一段时间。但是那个旧版本的 Ubuntu 在这次更新中消失了。此 WSL2 更新改变了 Linux (Ubuntu) 在此 PC 上的运行方式。在 WSL2 更新之后,Ubuntu 是从 Microsoft Store 安装的。这是 Ubuntu 20.04。

        此 WSL2 更新和新安装的 Ubuntu 版本还在这台 PC 上安装了更新版本的 bash。而这个较新版本的 bash 就是上面显示的较新版本的 bash。

        了解这两个 bash 版本之间差异的另一个好方法是在每个 shell 中输入以下内容:

        type ping
        

        结果应该清楚地表明一个版本的 bash 提供了来自 Windows 的源代码,而另一个版本的 bash 提供了来自 Ubuntu 的源代码。

        ping is /c/windows/system32/ping
        ping is /usr/bin/ping
        

        有时一张图片胜过一千字。下面附上两个并排的新 Windows 终端。

        这些终端显示两个不同版本的 bash。 Echo 返回在 MinGW shell 中使用的旧版本的 bash,而 Echo 返回在 Ubuntu shell 中使用的新版本的 bash。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-11-26
          • 1970-01-01
          • 2020-05-16
          • 2012-02-20
          • 1970-01-01
          • 1970-01-01
          • 2014-05-19
          相关资源
          最近更新 更多