我重定向(或关闭)stdout但是/ dev / fd(和/ proc / self / fd)仍然显示stdout转到tty:
%exec 1> log
%ls -l / dev / fd /> / dev / stderr
得到这个
总共0(ls -l / proc / self / fd /打印相同)。
命令
%date
不在屏幕上打印日期但是
%cat log>的/ dev / stderr的
2015年9月22日星期二15:59:48
表示date命令的输出已写入' log'
我可以在c程序中关闭fd 1(或通过exec 1>& - ),而/ dev / fd / 1仍然显示它指向我的tty。有人对这种行为有解释吗?
Fedora fc22 4.1.6-201& Archlinux版???在我的Raspberry PI上
答案 0 :(得分:0)
您正如预期的那样关闭了shell的文件描述符1。但是,当您检查文件描述符1是什么时,您使用了:
ls /dev/fd > /dev/stderr
但是>
做了什么?对于该单个命令,它重新打开文件描述符1,指向文件/dev/stderr
。因此,由于/dev/stderr
指向您的伪终端,ls
的文件描述符1也将指向您的伪终端,/dev/fd
反映了这一点。如果你想打印出shell进程的文件描述符,而不是ls
的进程,你需要明确地说:
ls -l /proc/$$/fd > /dev/stderr