Comment lire en utilisant “read” du descripteur de fichier 3 en script bash?

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

Cela émule plus de commande .. je reçois cette erreur ..

lecture: 26: Option illégale -u

Assurez-vous de saisir le nom d’un fichier contenant plus de 15 lignes. J’ai également lu la page de manuel de “read” et je n’ai pas eu l’option “-u”.

Alors, comment lire en utilisant “read” du descripteur de fichier 3 (qui est la copie de stdin).

essayer

 read key <&3 

Il est également possible de faire bash pour assigner un descripteur de fichier à une variable; Le numéro de descripteur libre suivant sera atsortingbué à partir de 10. Par exemple:

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

Juste pour mémoire, voici encore un autre 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 

trouvé ici: http://codesnippets.joyent.com/posts/show/1788