我不使用 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
。这会始终启动到bash
Ubuntu 实例内的 shell,即使用户的 shell 已在/etc/passwd
.ubuntu.exe
另一方面,该命令(或其变体之一)会将 WSL Ubuntu 发行版启动到用户的/etc/passwd
shell 中。最近的历史
然后我们来到了一个灰色区域,我认为不可能说 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 可能会导致意外损坏。