Unix/重定向快速入门
当你执行一个有输出的命令时,我们说它默认会写入标准输出,也就是屏幕。如果一个命令需要输入,我们说它从标准输入读取,也就是键盘。我们已经多次见过的ls命令会生成一个文件和目录的列表作为其输出,并将其打印到屏幕上。我们将使用一个新的命令 - cat - 来研究如何将流'重定向'到标准输入或输出。
你可以使用cat命令来接收输入并将其写入标准输出。通常你像这样使用它
%cat myfile.txt
它会将myfile.txt的内容放到屏幕上,然后返回到提示符。它滚动内容非常快!
当你以描述的方式使用cat时,输入来自文件,它写入标准输出(你猜对了:屏幕)。但我们可以指示cat从文件以外的地方获取输入,并将输出发送到屏幕以外的地方。
你可以使用cat来捕获在键盘上键入的内容,并将其发送到某个输出。我们可以通过在不指定文件名的情况下键入cat来尝试它,就像这样
% cat
你现在可以在键盘上输入,当你输入完你想要的字符后,按下回车键换行。当你完全输入完后,键入 Ctrl-d(简写为 ^D)来结束该过程。如果你像这样运行cat而不命名要读取的文件,它会读取标准输入(键盘),并在收到'文件结束'(^D)时,将其复制到标准输出(屏幕)。
正如我所说,你可以重定向命令的输入和输出。
你使用>符号将输出重定向到文件。例如,要创建一个名为colours的文件,其中包含颜色名称列表,键入
% cat > colours
然后输入一些颜色的名称。每个名称后按[回车]键,最后以^D结束。
pink yellow purple ^D
(这意味着按[Ctrl]和[d]来停止)。
cat命令读取标准输入(键盘),>将输出(通常会发送到屏幕)重定向到一个名为 colours 的文件
要读取文件的内容,键入
% cat colours
(这并不是创建文本文件的最佳方法 - 通常我建议使用像vi或emacs或pico这样的编辑器,但我们正在学习重定向,而不是文本编辑。)
如果你使用>>来重定向,那么标准输出将被重定向到文件的末尾,并追加到现有内容中。因此,要向 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命令并进行处理,然后再显示。