标准输出 (stdout)
100%

文本操作 · 第 1 课

标准输出 (stdout)

了解标准输出如何流向终端,以及 Bash 如何把它重定向到文件。

程序通过输入/输出流通信。标准输出简称 stdout,是程序通常用来传递正常结果的数据流。在终端中,shell 最初会把这条流连接到终端显示区域。

写入标准输出

$ echo Hello World
Hello World

stdout 的文件描述符是 1;重定向多条流时,这个数字会很有用。程序还可以拥有标准输入 stdin 和标准错误 stderr,后续课程会介绍它们。

没有重定向时,交互式终端中的 echo Hello World 通常会把正常输出发送到哪里?

使用 > 替换文件

Bash 会把 > 解释为输出重定向运算符。它打开目标文件,并把命令的 stdout 连接到该文件:

$ echo Hello World > peanuts.txt

文字不再显示在终端,因为 stdout 流向了 peanuts.txt。如果文件不存在,shell 会创建它;如果文件已经存在,shell 会在命令写入前清空它,原内容会丢失。

使用 cat 检查结果:

$ cat peanuts.txt
Hello World

notes.txt 已经包含文字。echo new > notes.txt 会做什么?

因为 shell 会在命令运行前打开目标,所以按 Enter 前必须确认路径。即使命令随后失败,拼错或选错的现有文件也可能已被清空。

使用 >> 追加到文件

需要把新的 stdout 添加到文件现有内容之后时,请使用 >>

$ echo Another line >> peanuts.txt
$ cat peanuts.txt
Hello World
Another line

> 一样,>> 也会创建缺失的目标。区别在于打开现有文件的方式:>> 会追加,而不是清空。

哪个命令会把 Finished 添加到 status.log 末尾,而不擦除现有内容?

重定向由 shell 处理

shell 会识别 >>>,不把这些运算符作为参数传给程序,而是打开文件并建立数据流连接。命令本身仍照常向 stdout 写入。

因此,相同的重定向语法适用于许多命令:

$ pwd > current-directory.txt
$ ls -la >> directory-list.txt

pwd > current-directory.txt 中,通常由谁解释 >

要练习标准流重定向,可以尝试这个动手实验:

  1. 在 Linux 中重定向输入和输出 - 通过使用 >>>2> 等运算符以及 tee 命令来操作标准输出 (stdout)、标准错误 (stderr) 和标准输入 (stdin),练习控制命令的数据流。

课程已完成

你已完成 标准输出 (stdout)

现在,你可以重定向命令的标准输出,并正确区分替换与追加行为。

  • 知道 stdout 是承载命令正常结果的数据流。

  • 使用 > 替换文件内容。

  • 使用 >> 保留现有内容并追加。

  • 在 shell 打开目标前确认路径。

保存学习进度

创建免费账户即可保存本课进度,并在任意设备上继续学习。

创建免费账户
下一节
返回 文本操作