待续
linux标准文件描述符:
文件描述符 | 缩写 | 描述 |
0 | STDIN | 标准输入 |
1 | STDOUT | 标准输出 |
2 | STDERR | 标准错误 |
标准输入和标准输出指的就是键盘和显示器。
当文件描述符(0,1,2)与重定向符号(<)组合之后,就可以重新定向输入,输出,及错误。
重定向的一些写法:
1. > 默认为 1> 。 如 ls xx > filename ,那么 标准输出重定向到 filename 文件中,filename 开始如果不存在就会新建,若原来就有filename则删除原有的内容,重新写入。
2. &> 和 >& 比较。如,ls xx yy &> filename 会把 标准输出和标准错误输出都重定向到filename中;又如 ls xx yy >& filename 同样也会 把 标准输出和标准错误输出都重定向到filename中,似乎没有什么区别,如果有什么 不同告诉我一下。
3. >&1 ,>&2,>1,>2 比较。如,ls xx yy >&1 输出重定向到标准输出。系统默认好像也是这个; ls xx yy >1 不会重定向到标准输出,而是会在当前目录下新建文件1,把输出内容定向到1中,也就是 有没有&这个符号,代表着是不是输出到标准输出还是输出到新建文件。>&2和>2与前面的分析相似。
4. 1&> filename ,2&>filenam比较. ls xx yy 1&>filename 这种表示法会把1当做一个目录下的文件而不是代表标准输出,也就是bash 会这么认为 ls xx yy 1 & >filename 这种形式。2&>filename 和 1&>filename一样。
5.1&2>filename , >1&2 ,这中 并不代表把标准输出和标准错误输出重定向到filename ,也不是代表内容 重定向到 标准输出和标准错误输出,这中用法 算是不正确的用法吧。
另外一个非常有用的重定向操作符是 "-",请看下面这个例子:
该命令表示把 /source/directory 目录下的所有文件通过压缩和解压,快速的全部移动到 /dest/directory 目录下去,这个命令在 /source/directory 和 /dest/directory 不处在同一个文件系统下时将显示出特别的优势。
另外,几种不常见的用法:
<&- 表示关闭标准输入(键盘)
n>&- 表示将 n 号输出关闭
>&- 表示将标准输出关闭