执行程序

执行程序

我不使用 Windows,也没有可用的副本。我想知道 WSL2 的默认 shell 是什么?它附带 sh、Bash 或 ZSH 吗?或者,它是否使用 PowerShell——我知道它也可以在 WSL2 上运行。

这有记录在任何地方吗?

答案1

简短回答

WSL 上的默认发行版是 Ubuntu,对于 Ubuntu:

  • 默认的交互式 shell 是bash
  • 默认的非交互式 shell 是dash

因此,通过传递属性,假设您的意思是“默认交互”,我想我们可以说 WSL 的默认 shell 是bash.

更多详情

几天前我想过回答这个问题,但似乎并没有真正保证“碰撞”。然而,由于社区机器人今天选择了这个问题来自动提出(因为没有可接受的答案),所以我会给它一个稍微不同的解释。

首先,我想您现在已经知道,WSL 支持许多不同的 Linux 发行版。您可以从 Windows 中的 Microsoft Store 安装其中的一些,也可以为大多数其他发行版导入 rootfs。

我真的更喜欢(并且同意)Debian定义对于 shell 来说,是“默认”的。总有:

  • 默认的交互式 shell,在创建时默认分配给用户(以及root)。
  • 默认的非交互式 shell,根据定义,它/bin/sh是链接到的任何内容,以便以尽可能快速和兼容的方式运行系统和其他“POSIX”脚本。

一些历史

  • WSL 早期日子

    当 WSL 是首先宣布,它被(也许不太好)称为“Windows 上的 Ubuntu 上的 Bash”。那时,我认为用“Bash”回答你的问题是相当明显的。

    使用启动 WSL 的命令来启动 WSL/Ubuntu 会话是很常见的bash.exe。这始终启动到bashUbuntu 实例内的 shell,即使用户的 shell 已在/etc/passwd.

    ubuntu.exe另一方面,该命令(或其变体之一)会将 WSL Ubuntu 发行版启动到用户的/etc/passwdshell 中。

  • 最近的历史

    然后我们来到了一个灰色区域,我认为不可能说 WSL 存在任何“默认分布”。您首先安装/启用了 WSL,然后从 Microsoft Store 中选择了一个发行版。

    启动方法bash.exe被“半弃用”(在 Microsoft 文档中称为“历史命令”),新的方法wsl.exe取代了它。它总是违约到用户定义的 shell,但任何可执行文件都可以通过(或)/etc/passwd作为父进程启动。wsl --execute <appname>wsl -e

    在此期间,除了“这取决于发行版”之外,很难回答您的问题,因为没有“默认”发行版。

  • 今天

    从 Windows 10 版本 21H2 和 Windows 11 开始,有一个新的 WSL 安装过程。基本wsl命令随 Windows 一起提供,但需要通过wsl --install.这个命令,再一次,默认 Ubuntu 作为默认发行版。

    因此,到目前为止,可以(再次)公平地说 Ubuntu 是 WSL 的默认发行版。

  • 明天

    谁知道?到目前为止,WSL 的 5 年历史显然已经发生了很大的变化,所以我确信它可能会再次发生变化:-)。

答案2

如果你开始使用 wslbash.exe那么它显然是 bash!但 Windows 10 的新版本已经改变了一些情况。

看看这个: 更改 wsl 的默认 shell

答案3

除了微软我找不到任何具体的文档WSL 参考页面它说:

执行程序

以下列表包含wsl.exe自 Windows 版本 1903 起使用时的所有选项。

使用:wsl [Argument] [Options...] [CommandLine]

运行 Linux 命令的参数

  • 无参数

如果未提供命令行,wsl.exe 将启动默认外壳


我在该页面上找不到任何实际定义默认 shell 的内容,但是在常见问题页面它说:

什么是巴什?

Bash 是一种流行的基于文本的 shell 和命令语言。它是默认外壳包含在 Ubuntu 和其他 Linux 发行版以及 macOS 中。用户在 shell 中键入命令来执行脚本和/或运行命令和工具来完成许多任务。

答案4

WSL 上的默认 shell 因发行版而异。该发行版针对其默认 shell 的构成以及其附带的 shell 设置了策略。

当您在首次设置时创建帐户时,系统会向您提供该发行版的默认交互式 shell。请注意,在某些情况下这与默认 shell 不同。例如,Debian 和 Ubuntu 的默认 shell 是/bin/sh,通常是dash,但因为dash不是一个好的交互式 shell,bash如果没有指定,它是新用户的默认 shell。

您可以用来chsh更改用户的 shell,如果您这样做,WSL 将加载该 shell,至少用于交互用途。我的设置为/bin/zsh.

您不太可能发现 PowerShell 作为大多数 Linux 发行版上的可行选项,因为它与 POSIX 明显不同,并且 Linux 上的大多数软件都假定存在 POSIX shell。许多软件还假设用户的 shell 兼容 POSIX,或者如果不兼容,则至少是csh或之一fish,并且使用 PowerShell 可能会导致意外损坏。

相关内容