如何在bash脚本中使用文件描述符3中的"read"读取?

Abh*_*ogi 7 linux bash shell

http://bash.cyberciti.biz/file-management/shell-script-to-simulate-unix-more-command/

#!/bin/bash
# Write a shell script like a more command. It asks the user name, the
# name of the file on command prompt and displays only the 15 lines of
# the file at a time.
# -------------------------------------------------------------------------
# Copyright (c) 2007 nixCraft project <http://cyberciti.biz/fb/>
# This script is licensed under GNU GPL version 2.0 or above
# -------------------------------------------------------------------------
# This script is part of nixCraft shell script collection (NSSC)
# Visit http://bash.cyberciti.biz/ for more information.
# -------------------------------------------------------------------------

counter=1
echo -n "Enter a file name : "
read file

if  [ ! -f $file ]
then
    echo "$file not a file!"
    exit 1
fi

# read file line by line
exec 3<&0
while read line
do
       # pause at line no. 15
    if [ $counter -eq 15 ]
    then
        counter=0 # reset counter
        echo " *** Press [Enter] key to continue ..."
        read -u 3 enterKey
    fi
    echo $line
    (( counter++ ))
done < $file
Run Code Online (Sandbox Code Playgroud)

这模拟了更多命令..我收到此错误..

阅读:26:非法选项-u

确保输入一个超过15行的文件的名称.另外我读了"阅读"的手册页,我没有得到像"-u"这样的选项..

那么,我如何使用文件描述符3(它是stdin的副本)中的"read"来读取.

gho*_*g74 12

尝试

read key <&3
Run Code Online (Sandbox Code Playgroud)

  • 我得到:`-bash: 3: Bad file descriptor` (2认同)

Ed *_*all 9

也可以让bash为变量分配文件描述符; 下一个空闲描述符编号将从10开始分配.例如:

#!/bin/bash
FILENAME="my_file.txt"
exec {FD}<${FILENAME}     # open file for read, assign descriptor
echo "Opened ${FILENAME} for read using descriptor ${FD}"
while read -u ${FD} LINE
do
    # do something with ${LINE}
    echo ${LINE}
done
exec {FD}<&-    # close file
Run Code Online (Sandbox Code Playgroud)