n<&- 关闭输入文件描述符 n.
0<&-, <&- 关闭 stdin.
n>&- 关闭输出文件描述符 n.
1>&-, >&- 关闭 stdout.
子进程继承了打开的文件描述符. 这就是为什么管道可以工作. 如果想阻止 fd 被继承, 那么可
以关掉它.
exec 3>&1 # 保存当前 stdout 的"值".
ls -l 2>&1 >&3 3>&- | grep bad 3>&- # 对'grep'关闭 fd 3(但不关闭'ls').
exec 3>&-
我的测试如下:
ls -l 2>&1 >&3 3>&- | grep test #成功禁止了grep
ls -l 2>&1 >&3| grep test #成功禁止了grep
ls -l 2>&1 | grep test #成功禁止了grep
ls -l 2>&1 >&0 | grep test #禁止了grep ,0 1 2 3 都有显示,4就错误了
ls -l 2>&1- | grep test #啥也没
ls -l 2>&2- | grep test #grep出来了

没搞明白他们的逻辑关系,请问各位大大是怎么回事阿~~