shell常用重定向实例讲解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
shell常⽤重定向实例讲解
每个打开的⽂件都会被分配⼀个⽂件描述符.stdin (键盘), stdout (屏幕), 和 stderr (错误消息输出到屏幕上)的⽂件描述符分别是0, 1, 和 2. 对于正在打开的额外⽂件, 保留了描述符3到9.
⽂件描述符是⽂件系统为了跟踪这个打开的⽂件⽽分配给它的⼀个数字。
下⾯以实例说明
1,>的⽤法
复制代码代码如下:
[zhangy@localhost ~]$ echo "11111" > 1.txt
[zhangy@localhost ~]$ cat 1.txt
11111
[zhangy@localhost ~]$ echo "11111" 1> 1.txt //这个⽤法和上⾯的⽤法是⼀样
[zhangy@localhost ~]$ cat 1.txt
11111
[zhangy@localhost ~]$ echo "22222" >1.txt
[zhangy@localhost ~]$ cat 1.txt
22222
这种⽤法我想⼤家都⾮常的熟悉,因为这是我经常会⽤到的。
echo "11111" > 1.txt 时,>前⾯是有⼀个1的,是默认的。
>重定向到⽂件时,会将⽂件清空,在写⼊。
复制代码代码如下:
[zhangy@localhost ~]$ > 1.txt
[zhangy@localhost ~]$ :> 1.txt
上⾯的这个例⼦,可以把1.txt⽂件中的内容清空,其实也很好理解,清空后,不输⼊内容当然为空了。
2,>>的⽤法
复制代码代码如下:
[zhangy@localhost ~]$ echo "2222" >> 2.txt
[zhangy@localhost ~]$ cat 2.txt
2222
[zhangy@localhost ~]$ echo "2222" >> 2.txt
[zhangy@localhost ~]$ cat 2.txt
2222
2222
从上⾯的这个例⼦我们可以看出,>>重定向到⽂件时,会将输出写到⽂件的结尾。
这⼀点和>完全不同的。
3,0,1,2 到9,以及&
复制代码代码如下:
[zhangy@localhost ~]$ cat 1.txt
333
111
222
444
[zhangy@localhost ~]$ grep "22" 0< 1.txt //把1.txt中的内容读取出来
222
[zhangy@localhost ~]$ ls tank 2>> 1.txt //将错误信息放到⽂件的结尾
[zhangy@localhost ~]$ cat 1.txt
333
111
222
444
ls: tank: 没有那个⽂件或⽬录 //这个就是 2>> 1.txt产⽣的内容
[zhangy@localhost ~]$ (ls tank ;pwd) &>1.txt //将错误信息,以及输出内容放到1.txt⽂件中,&(stderr,stdout)
[zhangy@localhost ~]$ cat 1.txt
ls: tank: 没有那个⽂件或⽬录
/home/zhangy
i>&j重定向⽂件描述符i 到 j.指向i⽂件的所有输出都发送到j中去. i和j呢是0-9这间的数字
复制代码代码如下:
[zhangy@localhost ~]$ ls tank 2>&1|egrep \* 1> 2.txt //在这⾥我把错误信息重定向到了1,在这⾥1就会输出错误,根赋值差不多
[zhangy@localhost ~]$ cat 2.txt
ls: tank: 没有那个⽂件或⽬录
4,<>的⽤法
<这个符号是读取,>这个符号是输出,放在⼀起就打开并且读取,
复制代码代码如下:
[zhangy@localhost ~]$ echo 123546 > 2.txt
[zhangy@localhost ~]$ exec 4<> 2.txt //打开2.txt并将内容读取到&4中
[zhangy@localhost ~]$ read -n 4 <&4 //从&4中读取4个字符
[zhangy@localhost ~]$ echo -n . >&4 //在向&4写⼊⼀个点
[zhangy@localhost ~]$ exec 4>&- //关闭输出⽂件描述符4
[zhangy@localhost ~]$ cat 2.txt
1235.6
能过上⾯的这个例⼦,就可以很清楚了解<>他的作⽤
5,n<&-关闭输⼊⽂件描述符n n>&关闭输出⽂件描述符n
复制代码代码如下:
[zhangy@localhost ~]$ ls tank //会提⽰错误
ls: tank: 没有那个⽂件或⽬录
[zhangy@localhost ~]$ ls tank 2>&- //我把错误关闭后,什么也不输出了
6,|管理命令
这个命令也是我们常⽤的,是典型的,把⼀个命令的输出,当作另⼀个命令的输⼊
复制代码代码如下:
[zhangy@localhost ~]$ echo tank | wc -w
1
表⽰tank是⼀个输出,但它⼜是wc的输⼊,不然就不会有统计出现了。