重定向之exec
1.输入重定向(stdin)到文件
exec 要点
exec 6<&0 # 将文件描述符#6与stdin链接起来.# 保存stdin.
exec < data-file # stdin被文件"data-file"所代替.
read a1 # 读取文件"data-file"的第一行.
read a2 # 读取文件"data-file"的第二行.
exec 0<&6 6<&- # 现在将stdin从fd #6中恢复
#然后关闭fd #6 ( 6<&- ), 好让这个描述符继续被其他进程所使用.
# <&6 6<&- 这么做也可以.
2.输出重定向(stdout)到文件
同样的, exec >filename命令将会把stdout重定向到一个指定的文件中. 这样所有命令的输出就都会发送到那个指定的文件, 而不是stdout. exec N > filename会影响整个脚本或当前shell. 对于这个指定PID的脚本或shell来说, 从这句命令执行之后, 就会重定向到这个文件中, 然而
N > filename只会影响新fork出来的进程, 而不会影响整个脚本或shell. not the entire script or shell.
感谢你, Ahmed Darwish, 指出这个问题.
例子 16-2. 使用exec来重定向stdout
要点
LOGFILE=logfile.txt
exec 6>&1 # 将fd #6与stdout链接起来.# 保存stdout.
exec > $LOGFILE # stdout就被文件"logfile.txt"所代替了.
在这块中所有命令的输出都会发送到文件$LOGFILE中.
{commands}
exec 1>&6 6>&- # 恢复stdout, 然后关闭文件描述符#6.
I/O重定向是一种避免可怕的子shell中不可访问变量问题的方法.
阅读(509) | 评论(0) | 转发(0) |