Windows-Subsystem-for-Linux

適用於 Linux 的 Windows 子系統 (WSL) 中的預設 shell 是什麼?

  • October 6, 2021

我不使用 Windows,也沒有可用的副本。我想知道 WSL2 的預設 shell 是什麼?它是否附帶 sh、Bash 或 ZSH?或者,它是否使用 PowerShell——我知道它也在 WSL2 上執行。

這在任何地方都有記錄嗎?

簡短的回答

WSL 上的預設發行版是 Ubuntu,對於 Ubuntu:

  • 預設的互動式 shell 是bash
  • 預設的非互動式 shell 是dash

因此,通過傳遞屬性,假設您的意思是“預設互動”,我想我們可以說 WSL 的預設 shell 是bash.

更多詳情

幾天前我想過回答這個問題,但它似乎並沒有真正保證“顛簸”。但是,由於社區機器人今天選擇了這個問題來自動碰撞(因為沒有公認的答案),我會給它一個稍微不同的旋轉。

首先,我想您現在已經知道,WSL 支持許多不同的 Linux 發行版。您可以從 Windows 中的 Microsoft Store 安裝其中的一些,或者您可以為大多數其他發行版導入 rootfs。

當談到 shell 時,我真的更喜歡(並同意)Debian 對“預設”的定義。總有:

  • 一個預設的互動式 shell,在創建時預設分配給使用者(和分配給root)。
  • 一個預設的非互動式 shell,根據定義,/bin/sh它是連結到以盡可能快和兼容的方式執行系統和其他“POSIX”腳本的任何東西。

一些歷史

  • 早期的 WSL 日子

當 WSL首次宣佈時,它(可能很糟糕)被稱為“Windows 上的 Ubuntu 上的 Bash”。那時,我認為用“Bash”回答你的問題是相當明顯的。

bash.exe使用啟動 WSL 的命令來啟動WSL/Ubuntu 會話是很常見的。這始終啟動到bashUbuntu 實例內的 shell,即使使用者的 shell 已在/etc/passwd.

ubuntu.exe另一方面,該命令(或其變體之一)會將 WSL Ubuntu 發行版啟動到使用者的/etc/passwdshell 中。

  • 近期歷史

然後我們來到了一個灰色地帶,我認為不可能說 WSL 有任何“預設分佈”。您首先安裝/啟用了 WSL,然後從 Microsoft Store 中選擇了一個發行版。

啟動方法是“bash.exe半棄用”(在 Microsoft 文件中稱為“歷史命令”),新的wsl.exe取代了它。它始終預設為使用者定義的/etc/passwdshell,但任何執行檔都可以通過wsl --execute <appname>(或wsl -e)作為父程序啟動。

在此期間,除了“它取決於發行版”之外,很難回答您的問題,因為沒有“預設”發行版。

  • 今天

從 Windows 10 版本 21H2 和 Windows 11 開始,有一個新的 WSL 安裝過程。基本wsl命令隨 Windows 一起提供,但需要通過wsl --install. 此命令再次預設將 Ubuntu 作為預設發行版。

所以到目前為止,(再次)公平地說 Ubuntu 是 WSL 的預設發行版。

  • 明天

誰知道?到目前為止,在 WSL 的 5 年曆史中,它顯然已經發生了相當大的變化,所以我相信它可能會再次改變 :-)。

引用自:https://unix.stackexchange.com/questions/605298