关于重定向的解释
时间:2006-07-18 来源:CUDev
wangyao@fisherman:~$ cat > file<<EOF
> 1 2 3 4 5
> EOF
wangyao@fisherman:~$ cat file
1 2 3 4 5
wangyao@fisherman:~$ cat < file
1 2 3 4 5
wangyao@fisherman:~$ cat <file >file.bak
wangyao@fisherman:~$ cat < file.bak
1 2 3 4 5
wangyao@fisherman:~$ cat < file > file
wangyao@fisherman:~$ cat file
这里最后一条命令是不太好理解的。
前面提到:$ cat < file > file 之后原本有内容的档案结果却被洗掉了﹗要理解这一现象 其实不难,这只是 priority 的问题而已:
* IO Redirection 中stdout与 stderr的管道会先准备好才会从stdin读进资料。
也就是说,在上例中,>file 会先将 file 清空,然后才读进 < file ,
但这时候档案已经被清空了,因此就变成读不进任何数据了...
这个我们还可以做一个测试
wangyao@fisherman:~/bin$ ls
autoftp_ftp.sh delcomment.sh ftplgin.sh ftplogin.sh google.c smbadd.sh
wangyao@fisherman:~/bin$ ls > lsfile
wangyao@fisherman:~/bin$ cat lsfile
autoftp_ftp.sh
delcomment.sh
ftplgin.sh
ftplogin.sh
google.c
lsfile
smbadd.sh
这里lsfile里面有lsfile自己,为什么呢?系统是先建立的lsfile文件,再进行的ls操作。
wangyao@fisherman:~$ cat <> file
1 2 3 4 5
wangyao@fisherman:~$ cat file
1 2 3 4 5
这里 cat <> file是从stdin里面输入数据重定向到file
cat <file>>file
这个命令要慎用,因为它会不断的将原来file的内容写到新的file中。如果不加限制,他将会变得无穷大。
> 1 2 3 4 5
> EOF
wangyao@fisherman:~$ cat file
1 2 3 4 5
wangyao@fisherman:~$ cat < file
1 2 3 4 5
wangyao@fisherman:~$ cat <file >file.bak
wangyao@fisherman:~$ cat < file.bak
1 2 3 4 5
wangyao@fisherman:~$ cat < file > file
wangyao@fisherman:~$ cat file
这里最后一条命令是不太好理解的。
前面提到:$ cat < file > file 之后原本有内容的档案结果却被洗掉了﹗要理解这一现象 其实不难,这只是 priority 的问题而已:
* IO Redirection 中stdout与 stderr的管道会先准备好才会从stdin读进资料。
也就是说,在上例中,>file 会先将 file 清空,然后才读进 < file ,
但这时候档案已经被清空了,因此就变成读不进任何数据了...
这个我们还可以做一个测试
wangyao@fisherman:~/bin$ ls
autoftp_ftp.sh delcomment.sh ftplgin.sh ftplogin.sh google.c smbadd.sh
wangyao@fisherman:~/bin$ ls > lsfile
wangyao@fisherman:~/bin$ cat lsfile
autoftp_ftp.sh
delcomment.sh
ftplgin.sh
ftplogin.sh
google.c
lsfile
smbadd.sh
这里lsfile里面有lsfile自己,为什么呢?系统是先建立的lsfile文件,再进行的ls操作。
wangyao@fisherman:~$ cat <> file
1 2 3 4 5
wangyao@fisherman:~$ cat file
1 2 3 4 5
这里 cat <> file是从stdin里面输入数据重定向到file
cat <file>>file
这个命令要慎用,因为它会不断的将原来file的内容写到新的file中。如果不加限制,他将会变得无穷大。
相关阅读 更多 +