linux 中 重定向到 stdin 的思考
下午群里讨论一个事 ,源于关闭了stdout , stderr , 为什么 利用exec 1>&0 实现了能重新在终端看到输出
一开始也觉得纳闷,怎么exec 1>&0 可以直接"重新"利用stdout 呢。&0不是标准输入吗?
后来经过 群大佬的指点,以及stackoverflow ,终于明白了其中的道理
先来 ls -l /proc/$$/fd 看一下,发现0 ,1, 2 也就是对应的stdin,stdout,stderr都是一个软链接,指向/dev/pts/3 ,也就是当前终端,而且具有可读可写的权限。
那么我们实验一下:
首先能关闭stdout 后命令结果能直接显示到终端 ,先复制 stdout 到 &4:
关闭 stdout:
其实可以不用复制 stdout 到&4,因为本质都是链接到 /dev/pts/3 ,所以直接 >&0 ,>&2,都可以显示出来
然后使用exec 1<&0 恢复stdout, 使他再次指向 /dev/pts/3
总结:
所以本质是 stdin ,stdout.stderr 指向的是/dev/pts/3 也就是当前终端,所以关闭了stdout ,stderr 之后,可以利用exec 1>&0 来重新恢复stdout 的原因就是stdin 指向的也是/dev/pts/3 ,所以exec 1>&0 的作用就是让stdout 重新指向/dev/pts/3
那么如果以后遇到关闭了stdin,stdout,stderr 的情况,可以直接重定向到当前终端