對《大家都在點贊 Windows Terminal,我決定給你潑一盆冷水》一文的商榷
原文觀點
今日 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 便是我工作學習的地方。
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive