stdin - > 6, and data-file -> stdin and process, Finally, 6 -> stdin

#!/bin/bash
# Redirecting stdin using 'exec'.


#exec 6<&0          # Link file descriptor #6 with stdin.
                   # Saves stdin.

exec 0< data-file   # stdin replaced by file "data-file"

read a1            # Reads first line of file "data-file".
read a2            # Reads second line of file "data-file."
read a5

echo
echo "Following lines read from file."
echo "-------------------------------"
echo $a1
echo $a2
echo $a5

echo; echo; echo

exec 0<&6 6<&-
#  Now restore stdin from fd #6, where it had been saved, (0<&6)
#+ and close fd #6 ( 6<&- ) to free it for other processes to use.
#
# <&6 6<&-    also works.

echo -n "Enter data  "
read b1  # Now "read" functions as expected, reading from normal stdin.
echo "Input read from stdin."
echo "----------------------"
echo "b1 = $b1"

echo

exit 0

posted @ 2011-06-05 21:24  greencolor  阅读(200)  评论(0编辑  收藏  举报