| 中国 |
|
|
|
![]() |
使用 HP-UX: HP 9000 计算机 > 第 3 章 使用
Shell了解标准输入、标准输出和标准错误 |
|
每个进程打开三个标准“文件”:标准输入 (stdin)、标准输出 (stdout) 和标准错误 (stderr)。程序按如下方式使用这些文件: 下图说明了进程与这些文件的关系。 shell 允许用户将进程的标准输出由屏幕(缺省情况)重定向到文件。通过重定向输出不仅可以将命令生成的文本存储到文件中;还可以轻松选择程序所使用的文件或设备(如打印机)。 最简单的命令语法形式如下: stdout
其中,command 是输出重定向的命令,outfile 是进程将其标准输出写入的文件名。如果输出文件已经存在,其原有内容会丢失。如果不存在该文件,将另行创建。 要将输出添加到现有文件,请使用两个大于号 (>>) 指向要添加到的文件。 下图说明了重定向输出时 stdin、stdout 和 stderr 的传输方向。 以下示例说明了如何使用 who 命令重定向输出,此命令显示了当前登录到系统的用户列表。此示例将输出重定向到文件 whoison,而不是在终端屏幕上显示用户。 who(1)$ who > whoison 将输出重定向到 whoison。 使用 shell 可以重定向进程的标准输入,这样就可以从文件读取输入,而不必从键盘读取。要重定向进程输入,请使用指向命令名的小于号 (<) 分隔命令和输入文件名。任何可由 stdin(键盘)接受输入的命令,均可用于重定向输入。 最简单的命令语法形式如下: stdin
其中,command 是输入重定向的命令,outfile 是进程从中读取标准输入的文件的名称。具有该文件是成功进行重定向的必备条件。 下图说明了重定向输入时 stdin、stdout 和 stderr 的传输方向。 以下示例中,将 who 命令的标准输出重定向到名为 savewho 文件中。然后,使用 more 命令显示 savewho 文件的内容。最后,将 wc (word count) 命令的标准输入重定向为从 savewho 文件输入。 使用“>”$ who > savewho 将输出重定向到 savewho 使用“<”$ wc -l < savewho 将输入重定向为从 savewho 输入 在上例中,带有 -l 选项的 wc 命令统计了输入文件中的行数。因为输入方向已改为从文件 savewho 输入,所以执行 who 命令时,行数等于登录到系统的用户数。 可以重定向一个命令的标准输入和标准输出。不过,请不要为标准输入和标准输出使用相同的文件名。否则,输入文件的原始内容将丢失。 下图说明了重定向输出和输入时 stdin、stdout 和 stderr 的传输方向。 以下示例使用 sort 命令对由键盘键入的文本进行排序。键入 CTRL-D 结束标准输入。终端屏幕显示的标准输出如下: sort(1)$ sort 以下示例对输入进行了重定向: $ more socks 显示 socks 的内容。 $ sort < socks 将输入重定向为从 socks 输入,并将内容排序。 在上例中,sort 命令使用名为 socks 的文件作为输入。标准输出显示在终端屏幕上。 shell 允许用户连接两个或多个进程,这样一个进程的标准输出就可以用为另一个进程的标准输入。进程间的连接称为管道。要将某个进程的输出传输到另一进程,请用竖线 (|) 分隔命令。以下为管道的一般语法:
其中,command1 是将标准输出重定向或传输到另一命令的命令,而 command2 是其标准输入读取上个命令输出的命令。可以将两个或多个命令结合在一个管道线中。每个连续命令的输出,将传输为命令行中下一命令的输入:
在本示例中,将 who 命令的输出再次存储到文件 savewho 中。然后,savewho 文件用作 wc 命令的输入: wc(1)$ who > savewho 将 who 的输出结果重定向到文件 savewho。 使用管道线,可以将两个命令合二为一:
如上例所示,使用管道就无需使用临时的中间文件。而是,将第一个命令的标准输出直接发送到第二个命令中,作为它的标准输入。 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||