对《大家都在点赞 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 便是我工作学习的地方。
- bakaCirno [Chrome 73.0|Windows 10] 2019-05-10 11:12 10 赞 回复
-
比起写这些windows terminal到底值不值得被追捧的"撕逼"文章,我觉得这个时候出一篇介绍shell和terminal联系和区别的文章,就很好了,也不会引来争议。为了丰富内容,建议(同时也是我个人期望)可以加入shell,terminal,terminal emulator,console,tty,bash/zsh等概念的辨析和关系解释,最好还能包括这些词在历史上的意思和发展(比如早期的电传打字机),最好还能加上字体,terminfo,inputrc等相关文件的介绍和作用解释。我曾经研究过一些资料,但是被其他工作打断了,一直没有继续下去,如果贵站能出一篇相关的文章就最好不过了。
(我在原文章发表了这个评论,不知道为啥被吞了一半?,只好在这里再发表一份。)
- bakaCirno [Chrome 73.0|Windows 10] 2019-05-10 11:00 3 赞 回复
-
原文章虽然很激进,但实际想表达的应该是,这个本来早就该有的yet another one,现在才有,还受到了大家的热捧,相比起来,其他正在create new one的项目,关注度却不足。当然,可以说是原作者比较酸了,不过这个项目确实没有那么“激动人心”,类比起来就是,本该修建地铁的城市,却坚持十几年只开通公交线路,现在突然推出了双层公交,却被市民争相叫好,实际更需要的是修建地铁啊。
这篇文章的论述就有点偏了,WSL和Windows Terminal是两个项目,虽然有关联,但是收到热烈追捧的是teminal项目,WSL2反而关注度没那么高。
打通WSL和Windows环境远不止能在bash里执行exe文件这么简单,比如要写一个文件处理脚本,就要涉及WSL如何访问宿主的文件系统,文件编码如何转换。当然,这些微软都做了不少工作了,以后支持会越来越好。
- [1]来自223.104.210.124的 Chrome Mobile 74.0|Android 用户 发表于 2019-05-08 23:15 的评论:原文作者提到了一个非常直白的论点,市面上已有cmder,conemu这类工具,它们可以实现后台调用cmd或ps或bash,并且发展多年,诸如字体,主题,多Tab更是不在话下。微软这个可能做的更好,但是无疑属于yet another one类型。而cmd自身的硬伤在conemu主页上有明确介绍,ps的不足原文也写的中肯,那种驼峰写法用来写几百行大脚本固然无碍,但是只是做个简单的grep,rm不觉得太麻烦了吗。微软应该在革新cmd上使劲,而不是做一个市面已有的东西。而这个文章对此完全忽略了。[2]来自吉林松原的 Mobile Safari 12.1|iOS 12.2 用户 发表于 2019-05-09 03:00 的评论:已经有的就不能做了?何况windows现在内置的就有cmd,powershell,wsl,做一个自带的统一的现代化terminal难道不是顺理成章吗?为什么不革新cmd,这个就更搞笑,powershell就是为了革cmd搞出来的。至于你说什么grep,你怕是不知道grep根本不是shell的功能,而且grep --color也一样很麻烦,alias了解一下?驼峰什么的powershell可以自动补全的,bash/dash要是那么好也不会有zsh(ohmyzsh)fish,还有一些新兴的带自动补全的terminal了。
- bakaCirno [Chrome 73.0|Windows 10] 2019-05-10 10:47 2 赞 回复
- 微软官方不建议在powershell脚本中使用alias,比如应该使用Get-Content而不是cat取文件内容。不过现在编辑器加上插件,或者IDE用来写ps脚本应该都可以自动补全了,这个问题不大。
- [1]来自223.104.210.124的 Chrome Mobile 74.0|Android 用户 发表于 2019-05-08 23:15 的评论:原文作者提到了一个非常直白的论点,市面上已有cmder,conemu这类工具,它们可以实现后台调用cmd或ps或bash,并且发展多年,诸如字体,主题,多Tab更是不在话下。微软这个可能做的更好,但是无疑属于yet another one类型。而cmd自身的硬伤在conemu主页上有明确介绍,ps的不足原文也写的中肯,那种驼峰写法用来写几百行大脚本固然无碍,但是只是做个简单的grep,rm不觉得太麻烦了吗。微软应该在革新cmd上使劲,而不是做一个市面已有的东西。而这个文章对此完全忽略了。
- 来自上海上海交通大学的 Chrome Mobile 69.0|Android 8.1 用户 2019-05-09 13:40 3 赞 回复
-
conemu也不完美,yet another one并非没有意义啊。
powershell也有alias,并没有那么难用的。shell的风格更多只是风格问题。
对于cmd微软现在更看重兼容性,发展还得看ps和wsl啊。具体可以去看微软命令行组的博客。
- [1]来自223.104.210.124的 Chrome Mobile 74.0|Android 用户 发表于 2019-05-08 23:15 的评论:原文作者提到了一个非常直白的论点,市面上已有cmder,conemu这类工具,它们可以实现后台调用cmd或ps或bash,并且发展多年,诸如字体,主题,多Tab更是不在话下。微软这个可能做的更好,但是无疑属于yet another one类型。而cmd自身的硬伤在conemu主页上有明确介绍,ps的不足原文也写的中肯,那种驼峰写法用来写几百行大脚本固然无碍,但是只是做个简单的grep,rm不觉得太麻烦了吗。微软应该在革新cmd上使劲,而不是做一个市面已有的东西。而这个文章对此完全忽略了。
- 来自上海上海交通大学的 Chrome Mobile 69.0|Android 8.1 用户 2019-05-09 13:40 3 赞 回复
-
conemu也不完美,yet another one并非没有意义啊。
powershell也有alias,并没有那么难用的。shell的风格更多只是风格问题。
对于cmd微软现在更看重兼容性,发展还得看ps和wsl啊。具体可以去看微软命令行组的博客。
- [1]白栋毅 [Chrome 75.0|Windows 10] 发表于 2019-05-08 21:20 的评论:很期待WSL2
- 来自吉林松原的 Mobile Safari 12.1|iOS 12.2 用户 2019-05-09 03:13 4 赞 回复
- 是的WSL2听介绍很不错