2010-01-18 10 views
6

http://bash.cyberciti.biz/file-management/shell-script-to-simulate-unix-more-command/Comment lire en utilisant "read" du descripteur de fichier 3 dans bash script?

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

émule plus .. commande Je reçois cette erreur ..

lecture: 26: Option illégale -u

Assurez-vous d'entrer le nom de un fichier qui a plus de 15 lignes .. Aussi j'ai lu la page de manuel de "lire" et je n'ai pas eu une option comme "-u" ..

Alors, comment puis-je lire en utilisant "read" du descripteur de fichier 3 (qui est une copie de stdin).

+0

Quelle version de Bash? –

Répondre

11

essayer

read key <&3 
+0

: omg: que facile. thanx .. –

+0

J'obtiens: '-bash: 3: Mauvais descripteur de fichier' – Timo

0

Pour la petite histoire, voici encore un autre script supplémentaire:

# 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

5

Il est également possible d'obtenir bash pour attribuer un descripteur de fichier une variable; Le prochain numéro de descripteur libre sera attribué à 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 
Questions connexes