分类:
2012-08-02 21:53:24
原文地址:Linux Shell 文件重定向 小觑 作者:socay2
在unix以及类unix平台下,shell中关系到输入与输出命令大致如下(可能不全):
echo、read、cat、tree、less、more
在linux的shell中光是一个单独的命令,不能印证shell的强大。结合 管道 和 重定向 才能展现其魅力无穷。
管道,不用多说,就是将前一个命令的输出当做下一命令的输入。
下面讲一下文件重定向(以前我自己没有理解到的地方)
输出重定向:
command > filename #将标准输出重定向到文件filename中
等价于: command 1>filename
command >> filename #将标准输出追加到文件中
等价于:command 1>>filename
command 2> filenname #将标准错误重定向到文件中
command 2>> filename #已追加方式将错误放入文件中
command [>|>>] &m #将输出重定向到文件描述符m所代表的文件中,括号中的符号2选1
输入重定向:
command < filename
command << delimiter #例如cat命令: cat > file << delimiter,将delimiter重定向到标准输入后,在向file文件中写内容时,遇到delimiter结束。
command < &m #将文件描述符m所指文件作为标准输入
command < &- #关闭标准输入
上面的重定下命令,糅合到一起可以是这样:
command [>|>>] filename 2>&1 #将标准输入和标准错误输出都重定向到文件中了
command < filename1 > filename2 #将filename1作为标准输入,,标准输出到filename2
细心的朋友可能注意到,在使用文件描述符的时候,为什么有些前面带有符号'&',而有些又没有呢。
cat file > 2 #将标准输出重定向到 名为2的文件中
cat file >& 2 #将标准输出重定向到标准错误输出
cat file > &2 #语法错误
得到一个结论,符号'&'只能和重定向符号挨在一起,有'&' 表示后面的数字代表文件描述符,否则为普通文件。
好了,暂时告一段落,如果有不对的地方,忘各路神仙指正!!
今天看 《unix环境高级编程》 中,有一题:
比较 ./a.out > outfile 2>&1 和 ./a.out 2>&1 > outfile 的区别
想了半天还是有点晕,参考了下答案。其实在 shell 中的重定向就是调用了 dup2 函数。
把文件描述符想作指针,就明白多了. 文件描述符从定向就相当于指针重新指向另外一个地方了..