读书人

《Linux Shell》之8:I/O重定向

发布时间: 2013-07-08 14:13:00 作者: rapoo

《Linux Shell》之八:I/O重定向

# df -k | awk '$4>1000000'

?

10.2 I/O重定向

当linux系统启动一个进程时,将自动为该进程打开三个文件:stdin、stdout、stderr,分别由文件标识符0、1、2标识。

tee 命令 可以将shell命令的输出从stdout复制一份到某个文件中去

比如 ?

# who | tee output

# who | tee -a output ?--> 追加到末尾

tee命令主要用于shell脚本的调试,尤其是管道的调试

基本I/O重定向符号及其意义:

#!/bin/bashexec 8<&0 #FD 8是FD 0即标准输入的副本,用于恢复FD 0exec < hfileread aread becho "-----------------"echo $aecho $becho "close FD 8"exec 0<&8 8<&- #将FD 8恢复给FD 0后,关闭FD 8,以便其它进程可以使用FD 8这个文件标识符echo -n "Pls. enter data: "read cecho $c

?< 等价于 0<符号

?

再看将标准输出重定向到文件的例子:

#!/bin/bashexec 8>&1exec > loggerecho "output ...."dateecho "----------"dfexec 1>&8 8>&- # 将FD 8复制到FD 1 并关闭FD 8好让其它进程可以使用这个文件标识符echo "after reset...."datedf

?> 符号和 1>等价

?

高级I/O重定向符号及其意义:

#!/bin/bashls /etc > loggerwhile [ "$filename" != "rc.d" ]do read filename let "count += 1"done < loggerecho "$count times read"echo -n "---------Pls input file"read testecho $test

?

10.3.2 eval命令

eval命令将其参数作为命令行,让shell重新执行该命令行,eval的参数再次经过shell命令行处理的12个步骤

如果变量中包含任何需要shell直接在命令中看到的字符,就需要使用eval命令。命令结束符(; | &)、IO重定向符(< >)和引号这些对shell具有特殊意义的符号,就必须直接出现在命令行中,否则就要使用eval

#!/bin/bashecho "the number is $#"echo -n "the arg is : $(eval echo \$$#)"echo "----------END---------------"

?

?

?

读书人网 >UNIXLINUX

热点推荐