首先我们先回顾下bash现有的重定向符号
1.重定向输入输出,目标是文件word
[n]<word 默认n为0
[n]>word 默认n为1
[n]>|word 默认n为1 noclobber选项有关,直接例子就明白它的用处了
[n]》word 默认n为1
igi@igi-debian:~$ rm -f testfile
igi@igi-debian:~$ touch testfile
igi@igi-debian:~$ cat testfile
igi@igi-debian:~$ set -o noclobber
igi@igi-debian:~$ echo 2 >testfile
bash: testfile: cannot overwrite existing file
igi@igi-debian:~$ echo 2 >| testfile
igi@igi-debian:~$ cat testfile
2
2.重定向标准错误和标准输出到指定文件描述符
&>word 更通用
>&word
>word 2>&1
追加输出
&》word 没有》&word的表达方法
》word 2>&1
3.Here Documents
《[-]word
here-document
delimiter
-符号将删除所有行开头的tab符
4.Here Strings
<<<word
5.复制文件描述符
[n]<&word 默认n为0,如果为数字,必须得为打开的文件描述符
[n]<&- 关闭文件描述符
[n]>&word 默认n为1,如果为数字,必须得为打开的文件描述符
[n]>&- 关闭文件描述符
6.移动文件描述符
[n]<&digit- 默认n为0
[n]>&digit- 默认n为1
7.以读写方式打开文件描述符
[n]<>word 文件不在时会被创建
如果要深刻理解重定向,先要明白以下2点
1.shell(bash或者csh等)负责重定向,对于程序或者函数,这一切都是透明的,它只管输入输出,至于从哪输入哪输出,是shell解释器负责
2.shell命令解析过程中,在实际执行命令前,IO重定向先设置好
我们来看以下的例子
1.'echo 1 a1 >a2′ 与 'echo 1 >a2 a1′
igi@igi-debian:~$ echo 1 a1 >a2
igi@igi-debian:~$ cat a2
1 a1
igi@igi-debian:~$ rm a2
igi@igi-debian:~$ echo 1 >a2 a1
igi@igi-debian:~$ cat a2
1 a1
IO重定向是在命令执行前设置好,所以上面两种情况,最后的效果一样,bash先把输出重定向到a2文件,再执行'echo 1 a1′
2.'ls nothisfile >res 2>&1′ 与 'ls nothisfile 2>&1 >res'
igi@igi-debian:~/rtest$ ls nothisfile
ls: cannot access nothisfile: No such file or directory
igi@igi-debian:~/rtest$ ls nothisfile >res 2>&1
igi@igi-debian:~/rtest$ cat res
ls: cannot access nothisfile: No such file or directory
(责任编辑:VEVB)
新闻热点
疑难解答