跳转到内容

Unix/重定向快速入门

来自维基教科书,开放的书籍,开放的世界


重定向

[编辑 | 编辑源代码]

当你执行一个有输出的命令时,我们说它默认会写入标准输出,也就是屏幕。如果一个命令需要输入,我们说它从标准输入读取,也就是键盘。我们已经多次见过的ls命令会生成一个文件和目录的列表作为其输出,并将其打印到屏幕上。我们将使用一个新的命令 - cat - 来研究如何将流'重定向'到标准输入或输出。

显示文件内容

[编辑 | 编辑源代码]

你可以使用cat命令来接收输入并将其写入标准输出。通常你像这样使用它

%cat myfile.txt

它会将myfile.txt的内容放到屏幕上,然后返回到提示符。它滚动内容非常快!

使用 cat 从键盘捕获

[编辑 | 编辑源代码]

当你以描述的方式使用cat时,输入来自文件,它写入标准输出(你猜对了:屏幕)。但我们可以指示cat从文件以外的地方获取输入,并将输出发送到屏幕以外的地方。

你可以使用cat来捕获在键盘上键入的内容,并将其发送到某个输出。我们可以通过在不指定文件名的情况下键入cat来尝试它,就像这样

% cat

你现在可以在键盘上输入,当你输入完你想要的字符后,按下回车键换行。当你完全输入完后,键入 Ctrl-d(简写为 ^D)来结束该过程。如果你像这样运行cat而不命名要读取的文件,它会读取标准输入(键盘),并在收到'文件结束'(^D)时,将其复制到标准输出(屏幕)。

重定向输出

[编辑 | 编辑源代码]

正如我所说,你可以重定向命令的输入和输出。

你使用>符号将输出重定向到文件。例如,要创建一个名为colours的文件,其中包含颜色名称列表,键入

% cat > colours

然后输入一些颜色的名称。每个名称后按[回车]键,最后以^D结束。

pink
yellow
purple
^D 

(这意味着按[Ctrl]和[d]来停止)。

cat命令读取标准输入(键盘),>将输出(通常会发送到屏幕)重定向到一个名为 colours 的文件

要读取文件的内容,键入

% cat colours

(这并不是创建文本文件的最佳方法 - 通常我建议使用像viemacspico这样的编辑器,但我们正在学习重定向,而不是文本编辑。)

追加到文件

[编辑 | 编辑源代码]

如果你使用>>来重定向,那么标准输出将被重定向到文件的末尾,并追加到现有内容中。因此,要向 colours 文件添加更多项目,键入

% cat >> colours

然后输入一些更多颜色的名称

red
^D

(Control D 来停止)

这将键盘输入重定向到colours文件的末尾。

要读取文件的内容,键入

% cat colours

现在我们将创建一个名为 colours2 的文件

% cat > colours2
green
blue
^D

(Control D 来停止)

你现在有两个文件。一个列出了四种颜色,另一个列出了两种颜色。

将两个文件合并在一起

[编辑 | 编辑源代码]

我们现在将使用cat命令将 colours 和 colours2 合并(concatenate)到一个名为 allcolours 的新文件中。这实际上是该命令的最初目的。你像这样操作

% cat colours colours2 > allcolours

这样做的原理是依次读取 colours 和 colours2 的内容,并将结果组合到 allcolours 文件中。要读取新文件的内容,键入

% cat allcolours

重定向输入

[编辑 | 编辑源代码]

我们使用<符号来重定向命令的输入。

例如,sort命令按字母顺序或数字顺序对列表进行排序。键入

% sort

然后输入一些动物的名称。每个名称后按[回车]键。

dog
cat
bird
ape
^D

(控制 d 来停止)

输出将是

ape
bird 
cat 
dog

将输入重定向到文件

[编辑 | 编辑源代码]

使用<,你可以将输入重定向到来自文件而不是键盘。例如,要对颜色列表进行排序,键入

% sort < allcolours

排序后的列表将输出到屏幕上。

要将排序后的列表的输出重定向到文件,键入,

% sort < allcolours > sortedcolours

使用cat来显示 sortedcolours 文件的内容。

除了将命令的输出重定向到文件外,我们还可以使用管道将它传递给另一个进程。例如

% sort < allcolours | wc -l

在这种情况下,sort命令的输出被传递到wc命令并进行处理,然后再显示。

华夏公益教科书