適用於 Linux 的 Windows 子系統 (WSL) 中的預設 shell 是什麼?
我不使用 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 會話是很常見的。這將始終啟動到bash
Ubuntu 實例內的 shell,即使使用者的 shell 已在/etc/passwd
.
ubuntu.exe
另一方面,該命令(或其變體之一)會將 WSL Ubuntu 發行版啟動到使用者的/etc/passwd
shell 中。
近期歷史
然後我們來到了一個灰色地帶,我認為不可能說 WSL 有任何“預設分佈”。您首先安裝/啟用了 WSL,然後從 Microsoft Store 中選擇了一個發行版。
啟動方法是“
bash.exe
半棄用”(在 Microsoft 文件中稱為“歷史命令”),新的wsl.exe
取代了它。它始終預設為使用者定義的/etc/passwd
shell,但任何執行檔都可以通過wsl --execute <appname>
(或wsl -e
)作為父程序啟動。在此期間,除了“它取決於發行版”之外,很難回答您的問題,因為沒有“預設”發行版。
今天
從 Windows 10 版本 21H2 和 Windows 11 開始,有一個新的 WSL 安裝過程。基本
wsl
命令隨 Windows 一起提供,但需要通過wsl --install
. 此命令再次預設將 Ubuntu 作為預設發行版。所以到目前為止,(再次)公平地說 Ubuntu 是 WSL 的預設發行版。
明天
誰知道?到目前為止,在 WSL 的 5 年曆史中,它顯然已經發生了相當大的變化,所以我相信它可能會再次改變 :-)。