重定向文件描述符

重定向文件描述符

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脚本编程大全