清单 4. 列出文件 fileA.tar.bz2 和 fileC.tar.bz2
# ls
fileA.tar.bz2fileAA.tar.bz2 fileB.tar.bz2fileBB.tar.bz2
# ls fileA.tar.bz2 fileC.tar.bz2 1> ls.out 2> ls.err
# cat ls.out
fileA.tar.bz2
# cat ls.err
ls: 0653-341 The file fileC.tar.bz2 does not exist.
在 AIX 中,对 stdout 和 stderr 使用 > 和 >> 时应用相同的规则 。例如,以后的测试可以使用相同的输出文件,见 清单 5 。
清单 5. 使用输出文件进行以后的测试
# ls fileB.tar.bz2 fileD.tar.bz2 1>> ls.out 2>> ls.err
# cat ls.out
fileA.tar.bz2
fileB.tar.bz2
# cat ls.err
ls: 0653-341 The file fileC.tar.bz2 does not exist.
ls: 0653-341 The file fileD.tar.bz2 does not exist.
有时候,可能需要把 stdout 和 stderr 写到同一个文件或设备 。这有两种方法 。第一种方法是把 1> 和 2> 重定向到同一个文件:
# ls fileA.tar.bz2 fileC.tar.bz2 1> ls.out 2> ls.out
# cat ls.out
fileA.tar.bz2
ls: 0653-341 The file fileC.tar.bz2 does not exist.
第二个方法更简单更快速,有经验的 Unix 用户更喜欢采用这种方法:
# ls fileA.tar.bz2 fileC.tar.bz2 > ls.out 2>&1
# cat ls.out
fileA.tar.bz2
ls: 0653-341 The file fileC.tar.bz2 does not exist.
我们分解这个语句 。首先,执行 ls fileA.tar.bz2 fileC.tar.bz2 。然后使用 > ls.out 把 stdout 重定向到 ls.out,使用 2>&1 把 stderr 重定向到前面重定向的 stdout(ls.out) 。
请记住,可以把输出重定向到文件和其他设备 。可以把数据重定向到打印机、软盘、终端类型(TTY)以及各种其他设备 。例如,如果希望把一个消息发送给所有会话(或 TTY)上的某个用户,那么只需循环处理 who 并把一个消息重定向到 TTY(如果您有足够的权限的话),见 清单 6 。
清单 6. 把消息重定向到一个 TTY
# for _TTY in 'who | grep "cormany" | awk '{print $2}''
> do
>_TTY="/dev/${_TTY}"
>echo "Sending message to cormany on ${_TTY}"
>echo "Test Message to cormany@${_TTY}" > ${_TTY}
> done
Sending message to cormany on /dev/pts/13
Test Message to cormany@/dev/pts/13
Sending message to cormany on /dev/pts/14
stdin 而不是 stdout
尽管使用 > 和 >> 对于大多数人是一个相当容易掌握的概念,但是有的人在使用小于号(< 和 <<)时常常有困难 。在考虑 > 和 >> 时,认为它们把左边命令的输出数据流移动到右边的目标文件中,这样最容易理解 。同样的方法也适用于 < 和 << 。在使用 < 时,本质上是用一个已经提供的 stdin 执行一个命令 。也就是说,把已经提供的数据提供给左边的命令作为 stdin(即
例如,假设希望把一个包含 ASCII 文本文件的电子邮件发送给另一个用户 。可以使用管道把 cat 的 stdout 重定向到 mail 的 stdin(即 cat mail_file.out | mail –s "Here's your E-mail!" acormany@yahoo.com),也可以把文件的内容重定向到 mail 命令的 stdin:
# mail –s "Here's your E-mail!" acormany@yahoo.com < mail_file.out
使用 <<(也称为 here-document)可以节省格式化时间,并且使命令执行的处理更容易 。通过使用 <<,文本字符串被重定向到执行的命令作为 stdin,但是可以继续输入信息,直到到达终止标识符 。只需输入命令,输入 << 和终止标识符,然后输入需要的任何内容,最后在一个新行上输入终止标识符 。通过使用 here-document,可以保留空格、换行等 。
例如,Unix 必须单独处理下面五个 echo 语句:
# echo "Line 1"
Line 1
# echo "Line 2"
Line 2
# echo "Line 3"
Line 3
# echo "Line 4"
Line 4
# echo "Line 5"
Line 5
可以用以下代码替换多个 echo 语句,UNIX 只需处理一次执行:
推荐阅读
- UNIX 共享内存应用中的问题及解决方法
- 用Syslog 记录UNIX和Windows日志的方法
- 本周五Unix系统将发生时间错误
- 秦国是现在的哪个省
- 如何在Unix结果中抽取想要的参数
- 同步 UNIX 文件
- /dev/tty文件在Unix操作系统中的妙用
- 有关UNIX启动的一些体会
- NetWare与UNIX的互联方法与实现
- iphone xs max可以无线充电吗
