前言
在编写shell 脚本的时候, 可能这种命令经常写: command > ./a.log . 这段很容易理解, 就是将command 命令的输出写入到a.log 文件中. 但有时还需要处理输入流 或者错误流.
甚至于又时看到别人写的命令, 也有种看不懂的感觉, 比如 :
command 1>&- 2>/dev/null &
cat >1.txt<<EOF
文件内容
EOF
在经历了一段时间的困惑后, 决定好好看看重定向的具体方式.
介绍
先来简单介绍在重定向中用到的概念:
文件描述符:
- 0: 标准输入流(stdin)
- 1: 标准输出流(stdout)
- 2: 错误输出流(stderr)
重定向管道:
> : 覆盖的方式写入>> : 追加的方式写入< : 输入流重定向
特殊符号:
& : 重定向时, 用于标记现有的流. 为了区分文件名和文件描述符.
- 如:
2>&1 , 意思是将错误输出流重定向到标准输出流的文件中 &- : 特殊标识, 将标识符关闭. 1>&-
使用方式:
[n]>a.log : 重定向到文件[n]>&[m] : 将描述符n 重定向到描述符m <a.log : 从文件中读取输入
执行顺序, 对重定向按照从左到右的顺序进行解析, 通过下面的小例子, 应该可以很容易体会到顺序带来的影响. 区别如下:
好, shell 的重定向就这么点东西, 介绍完了, 跟着例子简单体会一下吧.
例子
command 1>a.log
command >a.log
>a.log command
0<1.txt cat
<1.txt cat
exec 0<&-
cat <<TAG
内容
TAG
command 1>&-
command >/dev/null 2>&1
OK, 没了, 就这么点东西. 过完之后再去看那些花里胡哨的重定向就不至于一头雾水了.
|