采用
Modern Unix其实是一种理念,就是使用更新的语言或者技术,
提升传统Unix命令行工具的功能,比如用lsd代替ls、zoxide代替cd等等,让命令行更加现代化。
命令行工具一直在开发中扮演中重要的角色,我们认为大致可以分为三个阶段:
- 传统阶段:这个阶段,各种命令行工具被创建,如耳熟能详的
grep,sed,awk三剑客,这些工具主要来自Unix,基本都使用C/C++编写,和Shell有很好的集成,同时也被适配到各种Linux发行版和Mac上。 - Node.js阶段:伴随着Node.js的流行,很多更新的命令行工具被创建,对比传统的命令行工具使用C/C++编写,门槛比较高,Node.js的门槛比较低,
所以很多人开始使用Node.js来编写命令行工具,命令行工具的功能也更加丰富,使用体验也更好,比如
http-server,nodemon等等。 - Rust/Golang阶段:Node.js命令行开发容易,但是对比传统命令行工具,性能不够好,所以很多人开始使用Rust和Golang来编写命令行工具。 这两种语言性能非常好、适用范围更广、开发成本适中,诞生了非常出色的命令行工具,可以说是Modern Unix的开始。
就目前的趋势来看,语言类的工具普遍有Rust化趋向,典型的如JavaScript, Python,其工具链基本已经完成了Rust生态化的过渡,而且已经形成了完整的体系。
当下绝对多数的命令行工具转向Rust和Go,只是偏向的领域不同而已,如Golang偏向于Kubernetes体现和网络编程,而Rust则偏向于语言、底层、数据库、AI等领域。
就我个人的使用经验,这些新的Modern Unix工具,比如lsd、zoxide、bat、fd等等,极大地提升提升了我们的效率。
我们都知道命令行工具的使用离不开控制台终端,这个目前来说也是井喷式发展。iTerm2 + oh-my-zsh + Powerlevel10k基本就是Mac程序员的标配,
还有价值超亿美元的Warp,都是用户体验极致的终端工具。
此外IDE、Editor也加强了控制台的使用体验,现在基本上没有IDE/Editor敢不集成命令行控制台的。如大家都使用的JetBrains IDE,就提供了The New Terminal (Beta) Is Now in JetBrains IDEs。 其他编辑器的终端也都非常好用,比如VS Code、Zed等等,Terminal已不在是一个独立的工具,而是IDE/Editor的一部分,并进行深度集成。
命令行工具也有其开发哲学,如果你有开发命令行工具的兴趣,建议先看一下Command Line Interface Guidelines
Modern Unix & Friends
- Structured text tools: https://github.com/dbohdan/structured-text-tools