對《大家都在點贊 Windows Terminal,我決定給你潑一盆冷水》一文的商榷

Locez發表於2019-05-08

原文觀點

今日 Linux 中國發布了一篇文章 《大家都在點贊 Windows Terminal,我決定給你潑一盆冷水》 。該文主要觀點引用如下:

  • Windows Terminal 是一個套在 Windows 作業系統原本的 CMD、Powershell、Windows Subsystem for Linux(WSL)之上的一個介面更加漂亮、功能更加強大的終端工具。嚴格來說,它是套在 CMD 、Powershell 之上的一個終端。
  • 它也只是一個終端而已,而不是一個更加好用的 Shell。
  • Windows 使用者所吐槽的命令列不好用不在於其表面,而在於其沒有一個足夠好用的 Shell。
  • 看起來,Windows Terminal 和 WSL 的結合,已經非常完美了,但作為一個 Shell 來用的話,又顯的過於笨重。
  • WSL 無論做的再怎麼好,無法擺脫它只是一個執行於 Windows 系統中附屬的子系統。無論 WSL 做的再好,本質上並沒有比虛擬機器做的更多。
  • 作為生態的打造者,微軟真正可以做好的是,打造一個能夠在體驗和生態上與 Unix Shell 一致的 Shell,或者是乾脆提供 Bash、Zsh 等常用 Shell 的原生支援(WSL 雖然支援 Bash、Zsh等,但依然是需要先進入 WSL 才能使用,但你可以暢想一下,如果 CMD 變成了 Bash,會是什麼樣的呢?)。
  • 對於廣大使用 Windows 開發的使用者來說,一個閃閃發亮的、現代化的、功能強大的終端固然很好,但好的終端只不過是錦上添花之舉,而一個強大好用的 Shell 才是真正能夠雪中送炭的東西,只有一個足夠好用的 Shell,才能成為 Windows 命令列世界的救世主。

關於原文更完整的觀點,請參閱原文。這裡針對原文觀點和表達一些不同意見的商榷。

Terminal 與 Shell

誠如原文所說,Windows Terminal 其實是一個視窗而已,真正執行的是裡面的軟體,但是 Windows Terminal 並不如原文說的那麼一無是處。眾所周知 CMD、PowerShell 預設進入以後是沒有標籤的,想要使用多個只能多開視窗,管理起來不如夠方便,而且配色也是影響使用者快速定位問題的一個重要指標。而這次的 Windows Terminal 不但解決這些問題,還能夠支援 emoji,可大大提升在裡面所執行的程式的使用體驗。

再來說說什麼是 shell ?一個 shell 是提供使用者與作業系統互動的介面/入口,當我們在命令列中輸入各種命令時,其實就是在執行一個應用程式,shell 將這些程式送往核心進行執行,所以最終還是要歸到核心的系統呼叫,此外廣義上的 shell 其實還包括了圖形介面。

讓我們來看看第一個點:

  • Windows Terminal 是一個套在 Windows 作業系統原本的 CMD、Powershell、Windows Subsystem for Linux(WSL)之上的一個介面更加漂亮、功能更加強大的終端工具。嚴格來說,它是套在 CMD 、Powershell 之上的一個終端。

Windows Terminal 準確來說就是一個支援配色的更加現代的終端入口,也不能說是巢狀什麼 CMD、PowerShell、WSL,你想怎麼使用它取決於你想進入什麼樣的命令列直譯器。舉個 Linux 下的例子就是我可以在 konsole 下使用 fish、zsh、bash 等 shell 直譯器。

更好用的 shell?

  • 它也只是一個終端而已,而不是一個更加好用的 Shell。

  • Windows 使用者所吐槽的命令列不好用不在於其表面,而在於其沒有一個足夠好用的 Shell。

  • 看起來,Windows Terminal 和 WSL 的結合,已經非常完美了,但作為一個 Shell 來用的話,又顯的過於笨重。

關於這裡,我覺得原文作者忽視了 Shell 與 Terminal 的區別。Shell 作為一個命令直譯器,必然有自己的語法。而 Linux 生態系統中已經很好用的 shell 就有 fish、zsh、bash 等,但是這些語法也不是所有都相容的,而且一個好用的 shell 一般只是使用者感覺上的東西,沒有很明確的指標。Windows 使用者在有了 WSL 之後可以使用任何 Linux 已經有的 shell 直譯器,這其實已經足夠解決問題了,畢竟這些工具的改進是為了吸引 Linux 平臺上的開發者,而不是為了一個毫無經驗的小白準備的。

此外,原文作者提到的 Windows Terminal 與 WSL(搭載完整核心) 結合作為 shell 使用的話,無異於高射炮打蚊子。這點我也是強烈反對的,首先 shell 只是一個命令直譯器,它其實不負責命令的執行,最終所有的程式都要傳遞給系統呼叫,如果底層的系統呼叫不支援,那麼該 shell 指令碼也是無法執行的(核心不會有反應、或者報錯),所以你要使用 shell,那麼必須要求有底層核心的支援,這不是什麼高射炮打不打蚊子的事,而是你必須要知道其實 shell 它自己本身就是個直譯器,沒有別的特異功能而已。

一個更好用的 shell 也許是值得吸引人的,但是其實 shell 的語法也不見得多好用,很多反人類的,只是我們已經學習接受了這種語法所以認可它。另一個方面是歷史問題,要想你寫的指令碼一次編寫處處執行,那麼最好就是 bash 相容了,否則別人為了執行你的特殊語法,還要裝一個能讀懂你的 shell 語法的直譯器。

wsl 與虛擬機器?

  • WSL 無論做的再怎麼好,無法擺脫它只是一個執行於 Windows 系統中附屬的子系統。無論 WSL 做的再好,本質上並沒有比虛擬機器做的更多。

我其實覺得這句話沒有道理,為什麼這樣說呢,確實 WSL 不會比虛擬機器做的更多,因為你虛擬機器安裝的是一個完整的作業系統,但是 WSL 優勢是什麼?

WSL 的優勢就是不需要虛擬機器,你便可以使用大部分 Linux 的生態,這是向開發人員示好。而且 WSL 不需要長期執行一個虛擬機器,在 WSL1 的時候,你實際執行應用 WSL 會把系統呼叫轉成 NT 系統呼叫。而 WSL2 將包含完整 Linux 核心,還將支援 Docker(此處無法得知它具體的實現,不做推測)。WSL1 的限制很多,使用起來不是特別方便,這個有使用過的朋友應該很有體會,但是 WSL2 既然能執行 Docker,那麼有了 Docker 我就有了一切。

生態體驗?

  • 作為生態的打造者,微軟真正可以做好的是,打造一個能夠在體驗和生態上與 Unix Shell 一致的 Shell,或者是乾脆提供 Bash、Zsh 等常用 Shell 的原生支援(WSL 雖然支援 Bash、Zsh等,但依然是需要先進入 WSL 才能使用,但你可以暢想一下,如果 CMD 變成了 Bash,會是什麼樣的呢?)。

  • 對於廣大使用 Windows 開發的使用者來說,一個閃閃發亮的、現代化的、功能強大的終端固然很好,但好的終端只不過是錦上添花之舉,而一個強大好用的 Shell 才是真正能夠雪中送炭的東西,只有一個足夠好用的 Shell,才能成為 Windows 命令列世界的救世主。

這兩個觀點也是不攻自破的,我既然可以使用 WSL,那麼我本身就擁有了 Linux 的生態。如果是希望寫 bat 批處理而能有 bash、zsh 的這些體驗,那麼確實是需要一個新的 shell 滿足 Unix Shell 語法,再來解釋 Windows 下的命令列,可是這其實也是不需要的。因為本人發現在 WSL 裡面執行一個 exe 程式是完全可行的,因此可以用這種 shell 語法去編寫我的指令碼,oh nice!!體驗非常統一啊有沒有?

locez@Lenovo-PC~> pycharm64.exe  ### 會啟動我的 pycharm
locez@Lenovo-PC~> git.exe | xargs echo

我的觀點

我本人認為,微軟的這些擁抱 Linux 的舉措,其實就是在吸引 Linux 上的開發者而已,開發者想要的工具,如果能夠在 Windows 下就能直接使用,那對我們這些開發人員來說無外乎是喜報。工具多一個總不是壞事,但是如果它真的值得使用,那麼使用者一定會增加,這就是需要微軟來做的事情了。我本人是雙系統使用者,在打遊戲娛樂方面我一定會使用 Windows,做開發寫程式碼我會切換到 Linux,曾經寫一個很小的軟體也是如此。但是後來 WSL 出現了,簡單的指令碼我可以在 Windows 下就直接完成並且提交,不需要重啟系統,然後繼續玩我的遊戲,美滋滋。

另外就是 Windows Terminal 與 WSL2 的出現會解放我現在系統上的一些工具,例如 git bash、gpg4win 等。如果 WSL2 真的有完整的系統呼叫,那麼我現有的 Windows 上的開發環境便不再需要,專注於遊戲娛樂,但是一進 WSL 便是我工作學習的地方。

對《大家都在點贊 Windows Terminal,我決定給你潑一盆冷水》一文的商榷

相關文章