跳到内容 中国
HP.com 主页 产品与服务 支持及驱动程序 解决方案 如何购买
» 联系惠普
更多选项
HP.com 主页
使用 HP-UX: HP 9000 计算机 > 第 3 章 使用 Shell

了解标准输入、标准输出和标准错误

» 

技术文档资料

完整的 PDF 手册
» 反馈
内容从此开始:

 » 目录

 » 词汇表

 » 索引

每个进程打开三个标准“文件”:标准输入 (stdin)、标准输出 (stdout) 和标准错误 (stderr)。程序按如下方式使用这些文件:

  • 标准输入是程序可以读取其输入的位置。缺省情况下,进程从键盘读取 stdin

  • 标准输出是程序写入其输出的位置。缺省情况下,进程将 stdout 写到终端屏幕上。

  • 标准错误是程序写入其错误消息的位置。缺省情况下,进程将 stderr 写到终端屏幕上。

下图说明了进程与这些文件的关系。

图 3-1 标准输入、标准输出和标准错误

标准输入、标准输出和标准错误

将标准输出写入文件

shell 允许用户将进程的标准输出由屏幕(缺省情况)重定向到文件。通过重定向输出不仅可以将命令生成的文本存储到文件中;还可以轻松选择程序所使用的文件或设备(如打印机)。

最简单的命令语法形式如下:

stdout

command > outfile

其中,command 是输出重定向的命令,outfile 是进程将其标准输出写入的文件名。如果输出文件已经存在,其原有内容会丢失。如果不存在该文件,将另行创建。

要将输出添加到现有文件,请使用两个大于号 (>>) 指向要添加到的文件。

下图说明了重定向输出时 stdinstdoutstderr 的传输方向。

图 3-2 重定向输出时的标准输入、输出和错误

重定向输出时的标准输入、输出和错误

以下示例说明了如何使用 who 命令重定向输出,此命令显示了当前登录到系统的用户列表。此示例将输出重定向到文件 whoison,而不是在终端屏幕上显示用户。

who(1)

$ who > whoison               将输出重定向到 whoison。
$ more whoison                显示 whoison 的内容。
pat    console  10 月 9 日 08:50  
terry  tty01    10 月 9 日 11:57  
kim    tty02    10 月 9 日 08:13  

使用标准输入文件

使用 shell 可以重定向进程的标准输入,这样就可以从文件读取输入,而不必从键盘读取。要重定向进程输入,请使用指向命令名的小于号 (<) 分隔命令和输入文件名。任何可由 stdin(键盘)接受输入的命令,均可用于重定向输入。

最简单的命令语法形式如下:

stdin

command < infile

其中,command 是输入重定向的命令,outfile 是进程从中读取标准输入的文件的名称。具有该文件是成功进行重定向的必备条件。

下图说明了重定向输入时 stdinstdoutstderr 的传输方向。

图 3-3 重定向输入时的标准输入、输出和错误

重定向输入时的标准输入、输出和错误

以下示例中,将 who 命令的标准输出重定向到名为 savewho 文件中。然后,使用 more 命令显示 savewho 文件的内容。最后,将 wc (word count) 命令的标准输入重定向为从 savewho 文件输入。

使用“>”

$ who > savewho               将输出重定向到 savewho
more savewho                  显示 savewho 的内容
pat   console 10 月 9 日 08:50  
terry tty01   10 月 9 日 11:57  
kim   tty02   10 月 9 日 08:13  

使用“<”

$ wc -l < savewho             将输入重定向为从 savewho 输入
3                             结果

在上例中,带有 -l 选项的 wc 命令统计了输入文件中的行数。因为输入方向已改为从文件 savewho 输入,所以执行 who 命令时,行数等于登录到系统的用户数。

同时重定向标准输入和标准输出

可以重定向一个命令的标准输入和标准输出。不过,请要为标准输入和标准输出使用相同的文件名。否则,输入文件的原始内容将丢失。

下图说明了重定向输出和输入时 stdinstdoutstderr 的传输方向。

图 3-4 同时重定向输入和输出

同时重定向输入和输出

使用缺省的标准输入和标准输出

以下示例使用 sort 命令对由键盘键入的文本进行排序。键入 CTRL-D 结束标准输入。终端屏幕显示的标准输出如下:

sort(1)

$ sort
muffy           
happy           
bumpy           
CTRL-D                       结束标准输入。
bumpy           
happy           
muffy              结束标准输出。

重定向标准输入

以下示例对输入进行了重定向:

$ more socks       显示 socks 的内容。
polka dot      
argyle         
plaid          

$ sort < socks     将输入重定向为从 socks 输入,并将内容排序。
argyle
plaid          
polka dot      

在上例中,sort 命令使用名为 socks 的文件作为输入。标准输出显示在终端屏幕上。

同时使用标准输入和标准输出重定向

以下示例将输入和输出的重定向结合在一起:

$ sort < socks > sortsocks        使用输入和输出重定向。
$ more sortsocks        显示 sortsocks 内容。
argyle                     
plaid
polka dot

在本示例中,sort 命令从 socks 文件中读取输入,并将输出写入 sortsocks 文件;因此,屏幕上不显示标准输出(与前两个示例不同)。

连接命令输出和输入

shell 允许用户连接两个或多个进程,这样一个进程的标准输出就可以用为另一个进程的标准输入。进程间的连接称为管道。要将某个进程的输出传输到另一进程,请用竖线 (|) 分隔命令。以下为管道的一般语法:

command1 | command2

其中,command1 是将标准输出重定向或传输到另一命令的命令,而 command2 是其标准输入读取上个命令输出的命令。可以将两个或多个命令结合在一个管道线中。每个连续命令的输出,将传输为命令行中下一命令的输入:

command1 | command2 | ... | commandN

在本示例中,将 who 命令的输出再次存储到文件 savewho 中。然后,savewho 文件用作 wc 命令的输入:

wc(1)

$ who > savewho         将 who 的输出结果重定向到文件 savewho。
$ wc -l < savewho     文件 savewho 输入到 wc 命令。
4        示例结果。

使用管道线,可以将两个命令合二为一:

$ who | wc -l
4

如上例所示,使用管道就无需使用临时的中间文件。而是,将第一个命令的标准输出直接发送到第二个命令中,作为它的标准输入。

使用带有管道的 tee 命令

tee 命令允许用户在无需更改管道线功能的情况下,将在命令间传递的数据的副本转移到文件中。以下示例使用 who 命令确定正在使用系统的用户。下图将对本示例作进一步说明,将 who 命令的输出传输到 tee 命令,该命令将输出的副本保存在文件 savewho 中,并将未经改动的输出传递到 wc 命令:

tee(1)

$ who | tee savewho | wc -l
3
$ more savewho
pat        console      10 月 9 日 08:50
terry      tty01        10 月 9 日 11:57
kim        tty02        10 月 9 日 08:13

图 3-5 使用管道和 tee 命令的标准输入和输出

使用管道和 tee 命令的标准输入和输出

更多信息

HP-UX 提供的过滤程序对管道线很有帮助。这些程序接受文本输入,使用某些方式对文本进行转换后,再以文本形式生成输出结果。过滤命令包括 adjustawkcutgrepheadmoreprrevsedsortspelltail。有关这些命令的详细信息,请参阅它们的联机帮助页。

打印版本
保密声明 使用本网站表示您同意其使用条件
© Hewlett-Packard Development Company, L.P.