一个 I/O 项目:构建一个命令行程序
本章是对你目前所学众多技能的回顾,并探索一些更多的标准库特性。我们将构建一个与文件和命令行输入/输出交互的命令行工具,来练习你已掌握的一些 Rust 概念。
Rust 的速度、安全性、单一二进制输出以及跨平台支持使其成为创建命令行工具的理想语言,因此在我们的项目中,我们将制作经典命令行搜索工具 grep(globally search a regular expression and print,全局搜索正则表达式并打印)的自己版本。在最简单的使用场景中,grep 在指定文件中搜索指定的字符串。为此,grep 接收一个文件路径和一个字符串作为参数。然后,它读取文件,找出该文件中包含字符串参数的行,并打印这些行。
在此过程中,我们将展示如何让我们的命令行工具使用许多其他命令行工具所使用的终端功能。我们将读取环境变量的值,以允许用户配置工具的行为。我们还会将错误消息打印到标准错误控制台流(stderr),而不是标准输出(stdout),这样例如用户就可以将成功输出重定向到文件,同时仍然在屏幕上看到错误消息。
Rust 社区的一位成员 Andrew Gallant 已经创建了一个功能完整、速度极快的 grep 版本,名为 ripgrep。相比之下,我们的版本会相当简单,但本章会给你一些背景知识,帮助你理解像 ripgrep 这样的真实项目。
我们的 grep 项目将结合你目前所学的许多概念: