Content #
可以将STDOUT的原先位置重定向到另一个文件描述符,然后再利用该文件描述符恢复STDOUT。
$ cat test14
#!/bin/bash
# storing STDOUT, then coming back to it
exec 3>&1
exec 1>test14out
echo "This should store in the output file"
echo "along with this line."
exec 1>&3
echo "Now things should be back to normal"
$
$ ./test14
Now things should be back to normal
$ cat test14out
This should store in the output file
along with this line.
$
第一个exec命令将文件描述符3重定向到了文件描述符1(STDOUT)的当前位置,也就是显示器。这意味着任何送往文件描述符3的输出都会出现在屏幕上。
第二个exec命令将STDOUT重定向到了文件,shell现在会将发送给STDOUT的输出直接送往该文件。但是,文件描述符3仍然指向STDOUT原先的位置(显示器)。如果此时将输出数据发送给文件描述符3,则它仍然会出现在显示器上,即使 STDOUT已经被重定向了。
向STDOUT(现在指向一个文件)发送一些输出之后,第三个exec命令将STDOUT重定向到了文件描述符3的当前位置(现在仍然是显示器)。这意味着现在STDOUT 又恢复如初了,即指向其原先的位置——显示器。
From #
Linux命令行与shell脚本编程大全