当前位置: > shell编程 >

shell文件描述符和文本重定向

时间:2015-01-18 01:35来源:linux.it.net.cn 作者:IT

文件描述符:是与文件输入和输出相关的整数.文件描述符可以判断文本输出的是否是正确信息或者是错误信息。
操作系统预留的三个文件描述符:0,1,2.
分别代表:0-stdin(标准输入),1-stdout(标准输出),2-stderr(标准错误).除了以上三个,我们还可以自定义文件描述符

看文件描述符之前首先看一个文本重定向。

 

 
1
2
3
4
>
例如:echo "abc" > aaa.log #先清空aaa.log,再将标准输出的abc字符串写到aaa.log中
>>
例如:echo "abc" >> aaa.log #将标准输出的abc字符串写到aaa.log中,(文本的最后一行)

 

如何知道成功或者失败?
当我们执行完一个命令之后。输出echo $? .如果返回值是0,则代表命令执行成功,出现任何非0的值都是执行失败。
例如:
一个命令的使用,
ls + #ls没有+这个参数,所以会爆出ls: cannot access +: No such file or directory.并且我们使用
ls + > aaa.log.是获取不到的。因为>默认是获取正确执行后的标准输出数据。
那么如何才能获取到呢。ls + 2> aaa.log ,2代表的是标准错误。这里只把错误信息定向到aaa.log中。

 

 
1
cmd 2>stderr.txt 1>stdout.txt

 

将stderr单独重定向到一个文件,将stdout重定向到另一个文件

将stderr转换成stdout,使得stderr和stdout 都被重定向到同一个文件中

 

 
1
cmd 2>&1 output.txt 或者 cmd &> output.txt

 

如果错误信息不想要则可以使用:

 
1
cmd 2>/dev/null

 

/dev/null是linux的一个特殊的设备,也被成为空洞。

有时候我们需要把输出重定向到文本,但是又想在终端上看到输出,那么tee这个命令就派上用场了。

 

 
1
2
3
4
#查看aaa.txt 并且作为stdout,tee命令是stdout重定向到(先清空,在写入)out.txt中。
cat aaa.txt | tee out.txt
#-a参数是追加到out.txt文本中
cat aaa.txt | tee -a out.txt

 

将文件内容重定向到命令

 

 
1
2
3
4
tango:shell zhuzhenyu$ cat < aaa.txt
log file header
this is test log file
function:system static

 

将脚本内部的文本块进行重定向
将EOF的文本块定向到aaa.txt中

 
1
2
3
4
5
6
#/bin/bash
cat<<EOF>aaa.txt
log file header
this is test log file
function:system static
EOF

 

自定义文件描述符
自定义文件描述符是> >> < 几个符号和文件的组合。用的机会比较小,这里写一个例子

 

 
1
2
3
4
5
6
7
8
tango:shell zhuzhenyu$ echo aaaaa > aaa.txt
#使用exec命令自定义文件描述符3
tango:shell zhuzhenyu$ exec 3<aaa.txt
#直接读取&3.即可显示文件aaa.txt内容。并且只能访问一次。
tango:shell zhuzhenyu$ cat<&3
aaaaa
#访问第二次时,这时候已经看不到数据
tango:shell zhuzhenyu$ cat<&3



(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容