Je crois que cela est pris en charge dans le shell Bourne:
exec 3<doc.txt
while read LINE <&3
do
stuff-done-to-$LINE
# the next two lines could be replaced by: read -p "Enter input: " INPUT
echo "Enter input:"
read INPUT
stuff-done-to-$INPUT
done < infile
entrée alterne entre le fichier et l'utilisateur. En fait, ce serait un bon moyen d'émettre une série d'invites à partir d'un fichier.
Ceci redirige le fichier "infile" vers le descripteur de fichier numéro 3 à partir duquel le premier read
reçoit son entrée. Le descripteur de fichier 0 est stdin
, 1 est stdout
et 2 est stderr
. Vous pouvez utiliser d'autres FD avec eux.
J'ai testé ceci sur Bash and Dash (sur mon système, sh est symétrique de tiret).
Bien sûr cela fonctionne. Voici quelques plus amusant:
exec 3<doc1.txt
exec 4<doc2.txt
while read line1 <&3 && read line2 <&4
do
echo "ONE: $line1"
echo "TWO: $line2"
line1=($line1) # convert to an array
line2=($line2)
echo "Colors: ${line1[0]} and ${line2[0]}"
done
Cette impression alterne le contenu de deux fichiers, en rejetant les lignes supplémentaires de quel que soit le fichier est plus.
ONE: Red first line of doc1
TWO: Blue first line of doc2
Colors: Red and Blue
ONE: Green second line of doc1
TWO: Yellow second line of doc2
Colors: Green and Yellow
Doc1 ne possède que deux lignes. La troisième ligne et les lignes suivantes de doc2 sont supprimées.
Je dois de préciser le premier bit ... la question/problème est spécifique à ma solution à la tâche, et ne fait pas partie du devoir, mais l'exigence que mon code soit dans Bourne non-étendue est. – Ashton
pur bourne script? Tu veux dire le shell bourne original, pas bash? – skaffman
oui, original bourne shell – Ashton