Linux 如何使用“阅读”;改为;从bash脚本中的文件描述符3开始?

Linux 如何使用“阅读”;改为;从bash脚本中的文件描述符3开始?,linux,bash,shell,Linux,Bash,Shell,#/bin/bash #像编写more命令一样编写shell脚本。它询问用户名和 #在命令提示下显示文件名,仅显示文件的15行 #一次删除一个文件。 # ------------------------------------------------------------------------- #版权所有(c)2007 nixCraft项目 #此脚本在GNU GPL 2.0或更高版本下获得许可 # ----------------------------------------------

#/bin/bash
#像编写more命令一样编写shell脚本。它询问用户名和
#在命令提示下显示文件名,仅显示文件的15行
#一次删除一个文件。
# -------------------------------------------------------------------------
#版权所有(c)2007 nixCraft项目
#此脚本在GNU GPL 2.0或更高版本下获得许可
# -------------------------------------------------------------------------
#此脚本是nixCraft shell脚本集合(NSSC)的一部分
#拜访http://bash.cyberciti.biz/ 了解更多信息。
# -------------------------------------------------------------------------
计数器=1
echo-n“输入文件名:”
读取文件
如果[!-f$文件]
然后
echo“$文件不是文件!”
出口1
fi
#逐行读取文件
执行3try


read key为了记录,这里还有另一个脚本:

# Author: Steve Stock
# http://www.linuxjournal.com/article/7385 (comments)

shmore() {
LINES=""
while read -d $'\n' line; do
  printf "%s\n" "$line"
  #echo "$line"
  LINES=".${LINES}"
  if [[ "$LINES" == "......................." ]]; then
     echo -n "--More--"
     read < /dev/tty
     LINES=""
  fi
done
return 0
}


shmore < file.txt
#作者:史蒂夫·斯托克
# http://www.linuxjournal.com/article/7385 (评论)
施莫尔(){
LINES=“”
读取-d$'\n'行时;执行以下操作
printf“%s\n”$line
#回音“$line”
LINES=“.${LINES}”
如果[[“$LINES”==”....“]];则
回声-n”--更多--”
阅读

可以在这里找到:

还可以让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
#/bin/bash
FILENAME=“my_file.txt”

exec{FD}I get:
-bash:3:Bad file descriptor
@Timo-在尝试读取之前,可能需要打开文件描述符3号?例如,使用
exec 3
# Author: Steve Stock
# http://www.linuxjournal.com/article/7385 (comments)

shmore() {
LINES=""
while read -d $'\n' line; do
  printf "%s\n" "$line"
  #echo "$line"
  LINES=".${LINES}"
  if [[ "$LINES" == "......................." ]]; then
     echo -n "--More--"
     read < /dev/tty
     LINES=""
  fi
done
return 0
}


shmore < file.txt
#!/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