<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>02-深入主题 on 编程那些事儿</title><link>https://before80.github.io/prgms/Rust/cli/in-depth/</link><description>Recent content in 02-深入主题 on 编程那些事儿</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Tue, 11 Aug 2026 23:57:44 +0800</lastBuildDate><atom:link href="https://before80.github.io/prgms/Rust/cli/in-depth/index.xml" rel="self" type="application/rss+xml"/><item><title>01-信号处理</title><link>https://before80.github.io/prgms/Rust/cli/in-depth/01-signal-handling/</link><pubDate>Sat, 01 Aug 2026 10:33:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/cli/in-depth/01-signal-handling/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://rust-cli.github.io/book/"&gt;Command Line Applications in Rust&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="signal-handling"&gt;信号处理&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://rust-cli.github.io/book/in-depth/signals.html"&gt;https://rust-cli.github.io/book/in-depth/signals.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;像命令行应用这样的进程，需要响应操作系统发来的信号。最常见的例子大概是 &lt;kbd&gt;Ctrl&lt;/kbd&gt;+&lt;kbd&gt;C&lt;/kbd&gt;，这个信号通常表示让进程终止。在 Rust 程序中处理信号时，你需要考虑如何接收这些信号，以及如何对它们做出反应。&lt;/p&gt;</description></item><item><title>02-使用配置文件</title><link>https://before80.github.io/prgms/Rust/cli/in-depth/02-using-config-files/</link><pubDate>Sat, 01 Aug 2026 10:33:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/cli/in-depth/02-using-config-files/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://rust-cli.github.io/book/"&gt;Command Line Applications in Rust&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="using-config-files"&gt;使用配置文件&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://rust-cli.github.io/book/in-depth/config-files.html"&gt;https://rust-cli.github.io/book/in-depth/config-files.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;处理配置可能会很烦人，尤其是当你要支持多种操作系统，而它们各自对短期与长期文件有不同存放位置时。&lt;/p&gt;
&lt;p&gt;对此有多种解决方案，有些比另一些更底层。&lt;/p&gt;</description></item><item><title>03-退出码</title><link>https://before80.github.io/prgms/Rust/cli/in-depth/03-exit-codes/</link><pubDate>Sat, 01 Aug 2026 10:33:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/cli/in-depth/03-exit-codes/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://rust-cli.github.io/book/"&gt;Command Line Applications in Rust&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="exit-codes"&gt;退出码&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://rust-cli.github.io/book/in-depth/exit-code.html"&gt;https://rust-cli.github.io/book/in-depth/exit-code.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;程序并不总能成功。出错时，你应确保正确发出必要的信息。除了&lt;a href="04-communicating-with-humans/"&gt;向用户报告错误&lt;/a&gt;之外，在大多数系统上，进程退出时还会发出一个退出码（0 到 255 之间的整数与大多数平台兼容）。你应尽量按程序状态发出正确的退出码。例如，在理想情况下程序成功时，应以 &lt;code&gt;0&lt;/code&gt; 退出。&lt;/p&gt;</description></item><item><title>04-与人沟通</title><link>https://before80.github.io/prgms/Rust/cli/in-depth/04-communicating-with-humans/</link><pubDate>Sat, 01 Aug 2026 10:33:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/cli/in-depth/04-communicating-with-humans/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://rust-cli.github.io/book/"&gt;Command Line Applications in Rust&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="communicating-with-humans"&gt;与人沟通&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://rust-cli.github.io/book/in-depth/human-communication.html"&gt;https://rust-cli.github.io/book/in-depth/human-communication.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;请先阅读教程中的 &lt;a href="https://before80.github.io/prgms/cli/tutorial/05-output-for-humans-and-machines/"&gt;CLI 输出一章&lt;/a&gt;。那一章讲如何向终端写入输出，而本章讨论的是要输出&lt;em&gt;什么&lt;/em&gt;。&lt;/p&gt;
&lt;h2 id="一切正常时"&gt;一切正常时&lt;/h2&gt;
&lt;p&gt;即使一切正常，报告应用进度也很有用。这些消息应尽量信息充分且简洁。日志里不要用过于技术化的术语。记住：应用并没有崩溃，用户没有理由去查找错误。&lt;/p&gt;</description></item><item><title>05-与机器沟通</title><link>https://before80.github.io/prgms/Rust/cli/in-depth/05-communicating-with-machines/</link><pubDate>Sat, 01 Aug 2026 10:33:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/cli/in-depth/05-communicating-with-machines/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://rust-cli.github.io/book/"&gt;Command Line Applications in Rust&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="communicating-with-machines"&gt;与机器沟通&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://rust-cli.github.io/book/in-depth/machine-communication.html"&gt;https://rust-cli.github.io/book/in-depth/machine-communication.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;命令行工具的真正威力，在你能把它们组合起来时才会显现。这并不是新想法：事实上，&lt;a href="https://en.wikipedia.org/wiki/Unix_philosophy"&gt;Unix 哲学&lt;/a&gt;里有这样一句话：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;期望每个程序的输出都能成为另一个（尚且未知的）程序的输入。&lt;/p&gt;</description></item><item><title>06-为 CLI 应用生成文档</title><link>https://before80.github.io/prgms/Rust/cli/in-depth/06-rendering-documentation-for-your-cli-apps/</link><pubDate>Sat, 01 Aug 2026 10:33:00 +0800</pubDate><guid>https://before80.github.io/prgms/Rust/cli/in-depth/06-rendering-documentation-for-your-cli-apps/</guid><description>&lt;blockquote&gt;
&lt;p&gt;译文 · 基于 &lt;a href="https://rust-cli.github.io/book/"&gt;Command Line Applications in Rust&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="rendering-documentation-for-your-cli-apps"&gt;为 CLI 应用生成文档&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://rust-cli.github.io/book/in-depth/docs.html"&gt;https://rust-cli.github.io/book/in-depth/docs.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;CLI 的文档通常包括命令中的 &lt;code&gt;--help&lt;/code&gt; 部分，以及一份手册（&lt;code&gt;man&lt;/code&gt;）页。&lt;/p&gt;
&lt;p&gt;两者都可以在使用 &lt;a href="https://crates.io/crates/clap"&gt;&lt;code&gt;clap&lt;/code&gt;&lt;/a&gt; 时通过 &lt;a href="https://crates.io/crates/clap_mangen"&gt;&lt;code&gt;clap_mangen&lt;/code&gt;&lt;/a&gt; crate 自动生成。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#58626f"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#b0c4de;background-color:#282c34;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;#[derive(Parser)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#76a9f9"&gt;pub&lt;/span&gt; &lt;span style="color:#76a9f9"&gt;struct&lt;/span&gt; &lt;span style="color:#ca72ff"&gt;Head&lt;/span&gt; &lt;span style="color:#abb2bf"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#7e97c3"&gt;/// 要加载的文件
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;pub&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;file&lt;/span&gt;: &lt;span style="color:#ca72ff"&gt;PathBuf&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#7e97c3"&gt;/// 要打印多少行
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8a93a5;font-style:italic"&gt;#[arg(short = &lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;n&amp;#34;&lt;/span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;, default_value = &lt;/span&gt;&lt;span style="color:#98c379"&gt;&amp;#34;5&amp;#34;&lt;/span&gt;&lt;span style="color:#8a93a5;font-style:italic"&gt;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#76a9f9"&gt;pub&lt;/span&gt; &lt;span style="color:#aa89ea"&gt;count&lt;/span&gt;: &lt;span style="color:#e5c07b"&gt;usize&lt;/span&gt;&lt;span style="color:#abb2bf"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#abb2bf"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;其次，你需要使用 &lt;code&gt;build.rs&lt;/code&gt;，在编译时根据代码中对应用的定义生成手册文件。&lt;/p&gt;</description></item></channel></rss>