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


### 原文观点


今日 Linux 中国发布了一篇文章 《[大家都在点赞 Windows Terminal，我决定给你泼一盆冷水](/article-10828-1.html)》 。该文主要观点引用如下：


* 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 便是我工作学习的地方。

