开发者

How to read using "read" from file descriptor 3 in bash script?

开发者 https://www.devze.com 2022-12-17 05:31 出处:网络
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

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
   开发者_如何学Python 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

This emulates more command.. I get this error..

read: 26: Illegal option -u

Make sure to enter the name of a file which has more than 15 lines.. Also I read the man page of "read" and i didnt get an option like "-u"..

So, how do i read using "read" from the file descriptor 3 (which is copy of stdin).


try

read key <&3


It's also possible to get bash to assign a file descriptor to a variable; The next free descriptor number will be allocated starting from 10. For example:

#!/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


Just for the record, here's yet another more script:

# 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

found here: http://codesnippets.joyent.com/posts/show/1788

0

精彩评论

暂无评论...
验证码 换一张
取 消