使用命令行会让你提高效率,即便是在 Windows 上也是如此。
对于 GUI 项目的易用友好和 CLI 的简单高效之间,存在一场旷日持久的讨论。但我这并不是想推动或是煽动一场圣战。RebelLabs 曾讨论过 JDK 内建工具并取得了不错的反响。因此我迫切的想分享几个自己无法割舍的非 JDK 命令行工具。
我确信每一个称职的开发者都至少对如何用命令行工作有所了解,不仅仅是因为一些工具只存在于 CLI 的各种变体,更是因为极客精神!
所有人们讨论的细微差别:比如操作系统的选择(当然是 OSX ,拥有漂亮的铝合金外壳),最喜欢的shell(真的应该是 ZSH)或者相较于 Emacs、Vim 更加出众的性能(除非你有比常人更多的手指),这些都不太相关。好吧,这有点网络论战的意思,但我保证这是最后一次!
所以,我的建议是你应该学会在命令行上使用这些工具,这会对你产生积极的影响,使你至少可以享受半个世纪的愉悦和高效!
总之,在这篇文章中我会和你分享四五个不为人熟知但却相当出色的命令行工具。作为额外的福利,我也会对如何在 Windows 上正确使用 shell 给出建议,这些知识本身很有价值。
我写这篇帖子,最主要是因为是我真的很喜欢用这些工具,并且我也想了解其他我所不知道的命令行工具。所以,优秀的读者请留言告诉我你最喜欢的 CLI 工具,这很重要!现在假定我们都有一个好的、可用的 shell,就让我们来学习几个简洁而有价值的命令行工具吧。
0. HTTPie
在我榜单上第一名是个被称作 HTTPie 的工具。别害怕,庆幸的是它和浏览器没有任何关系。本质上,它是一个 cURL 封装器,用来执行来自命令行的 HTTP 请求。HTTPie 增加了很多好的功能,比如自动格式化和智能高亮输出,使其更具可读性。此外,它采用了非常人性化的执行方式,不需要你记住那些模糊的标志位和选项。要执行 一个 HTTP 请求,你只要简单的运行 http,去发送 http POST,还有比这更简单优美的吗?
几乎所有的命令行工具都是简单的打包安装,HTTPie 也不例外。你只需要运行下面的命令即可安装。
在 OSX 上使用 homebrew,这是 OSX 上能够找到的最好的包管理器:brew install httpie
其他平台,使用 Python 的 pip命令:pip install –upgrade httpie
我个人在开发一个 REST API 的时候会经常用 HTTPie,因为它能让我便捷地查询 API,并且返回结构清晰、易读的数据信息。毫无疑问,这款工具免去了很多烦恼和沮丧。幸运的是,应用不仅停留在 REST APIs. 一般来说,所有通过 HTTP 的交互,无论他是输入或者输出数据,都能以一种易于阅读的方式完成。
我建议你浏览一下他们的网站,花10秒的时间安装接着运行一下。尝试去获取任何网站的源码,相信你会对输出结果感到惊讶。
小提示:将 HTTPie 的优势同 jq for command line JSON manipulation 或 pup for HTML parsing 结合起来,你将势不可挡!
1. Icdiff
在 ZeroTurnaround 我有幸接触到了 Mercurial,一个非常简单易用的集群服务器。在 OSX 上,出色的 GUI 项目 SourceTree 使得 Mercurial 即使在处理复杂问题上,也如清风拂面。不幸的是我总喜欢将 程序、标签、窗口 的数量控制在最少。由于总开着一个终端窗口,使用 CLI 就变得很有必要。
除了设置中的一个缺陷其他一切都很完美。这是一个让我无法拒绝的功能:将区别并排显示。谈起 icdiff,这是在每天所用的工具中,我最欣赏的。我们来看一张截图:
icdiff 本身是一个智能 Python 脚本,智能检测哪些地方做了修改、添加和删除。出色的色彩高亮使得用户很容易区分这三种不同的修改。
要使用icdiff,要完成以下几个步骤:
再次通过 homebrew 安装:brew install icdiff
从上述网站手动抓取 Python 脚本并把它添加到你的环境变量中
当你把 icdiff 和诸如 Mercurial 的集群服务器结合到一起的时候,你会发现效果超棒。要想充分的结合,你需要再完成两个配置步骤,already documented here在这里有详细说明。该说明的要点一是,要添加一个封装脚本以确保 icdiff 的 one-by-one file diff 可以在整个目录上运行。其次你需要配置你的集群服务器来真正使用 icdiff。上面的链接介绍了针对 Mercurial 的配置细节,将它移植到 Git 上应该也不太难。
2. Pandoc
按照“躬行己说”的精神,我开始通过 CLI 来完成整篇博文。大部分工作是在 OSC 的 iTerm2中借助 MacVim 完成的。所有的内容都是按照 MarkDown 的标准语法来书写和统一格式的。这里唯一的麻烦就是有时你很难准确猜到最终呈现的效果。
这就引出了下一个工具:Pandoc。它是如此强大和万能,可以说它是 CPL 下的一个奇迹。我们来看看如何使用它。
pandoc -f markdown -t html blogpost.md > blogpost.html
随便想一种标记格式。十有八九,Pandoc 可以将它从一种格式转换为其它任意一种。比如,我正在用 Vim 写这篇博文,并且用 Pandoc 将它从 MarkDown 转换为 HTML,也就是最终看到的结果。它很棒,只需要一个终端和浏览器,比起其他需要绑定到特定在线平台,它完全独立和离线。
不要把自己限定在一些譬如 MarkDown 的简单格式,尝试一些 docx 或 LaTeX 文件,以 PDF 或 epub 格式导出,尝试让它处理和格式化你的引文。总之它充满无限可能。
再次使用 brew install pandocdoes 这一技巧。我提及过我非常喜欢 Homebrew 吗?或许它应该加入我的工具榜单!不管怎样,你已经领会了它的要义。
3. Moreutils
接下来这个工具实际上是一个一系列好用工具的集合,它非 coreutils:Moreutils。在 moreutils 下,你可以得到任何你能想到的发行版。OSX 用户可以像我在文章中这样安装它,得到这一系列的好处。
brew install moreutils
下面是简短描述所包含程序的列表:
chronic:悄悄执行一个命令,只要它不挂掉
combine:通过布尔值计算来合并两个不同文件中的行。
ifdata:无需解析 ifconfig 输出就能获得网络接口信息
ifne:只要标准输入非空就执行一个程序
isutf8:检查一个文件或是标准输入是否是 utf-8 格式
lckdo:执行一个带锁的程序
mispipe:pipe 两个命令,返回前一个的退出状态
parallel:一次执行多个任务
pee:将标准输入信息输出到管道中
sponge:获取标准输入信息写到一个文件中
ts:给标准输入打上时间戳
vidir:在你的文本编辑器中编辑一个目录
vipe:将文本编辑器加到管道中
zrun:自动解压命令参数
维护者会暗示自己 sponge 或许是最有用的工具,因为你可以轻松地将标准输入写到一个文件中。不过,也不难发现其他诸如 chronic,parallel,以及 pee等命令的优势。
我个人最喜欢的毫无疑问是 vipe,这也是把这个集合加入榜单的重要原因。
由于数据通过管道从一个命令到另一个命令,所以你可以逐字拦截。即使在你的脚本里这算不上个有用的工具,但在运行交互式命令的时候,它的确很有帮助。这里我没有给出个有用的例子,而是给了你一个修改过的 fortune。
4. Babun
如今 Windows 系统自带两个不同的 shell:经典命令行和 PowerShell。让我们无视他们,来看看 Windows 下真正的命令行工具:Babun!该项目之所以让人叹为观止,是因为它将 *NIX 命令行的所有优点以一种预配置的方式带到Windows 中,一点也不拖泥带水。
而且,它默认的 shell是我最爱的 ZSH,当然它也能很容易的切换到 Bash,倘若那是你的菜的话。在 ZSH 下,打包了很受欢迎的 oh-my-zsh framework,无需任何配置,它就结合了 ZSH 的所有优点。这归功于一些非常明智的预设以及一个令人印象深刻的插件系统。
下载默认的 Babun,其中包含比任何一位理智的开发者所需要的多得多的应用,因此解压后它有 728 MB。作为回馈,你将获得比如 Vim 等必备的预装软件!
深入研究你会发现,Babun 基本上就是个对 Cygwin 的精美封装。如果你已经安装了 Cygwin 你可以无缝地复用那一个。否则它将把自己的 Cygwin 设为默认,并提供给你访问接口。
更多的兴趣点在于 Babun 提供自己的包管理器,再次包装了 Cygwin 的,以及同时面向自己和 oh-my-zsh 的更新机制。最棒的在于它不要求实际的安装,也不需要通常的管理员权限。这对于在一台锁定的电脑上工作的人来讲再好不过。