Lire l'entrée en bash à l'intérieur d'une boucle while
J'ai un script bash qui est en quelque sorte la suite,
cat filename | while read line
do
read input;
echo $input;
done
mais ce n'est clairement pas de me donner le droit de sortie que lorsque je fais lire dans la boucle while, il tente de lire à partir du fichier nom de fichier en raison de l'éventuelle redirection d'e/S.
Toute autre manière de faire de même?
- Même chose se produit lorsque vous changer d'utilisateur en bash et exécuter des commandes de lecture en vertu de la commutation de l'utilisateur dans le script
Vous devez vous connecter pour publier un commentaire.
De lire à partir du terminal de contrôle de l'appareil:
plus d'infos: http://compgroups.net/comp.unix.shell/Fixing-stdin-inside-a-redirected-loop
bash yourscript < /foo/bar
va attendre pour la saisie de l'utilisateur, ce qui est acceptable que lorsque la lecture des mots de passe. La réponse par @GordonDavisson est préférable pour toutes les autres utilisations.Vous pouvez rediriger la régulière stdin par le biais de l'unité 3 pour garder les obtenir à l'intérieur de la canalisation:
BTW, si vous êtes vraiment à l'aide de
cat
de cette façon, la remplacer par une redirection, et les choses deviennent encore plus facile:Ou, vous pouvez permuter l'entrée standard stdin et de l'unité 3, dans cette version-lire le fichier avec l'unité 3, et il suffit de laisser stdin seul:
read line
est lecture à partir de la notification fini, mais si vous venez de l'exécuter en tant qu'écritread -u 3 input
est la lecture à partir de la console)?Essayer de changer la boucle comme ceci:
De test de l'unité:
Il ressemble à vous de le lire deux fois, la lecture à l'intérieur de la boucle while n'est pas nécessaire. Aussi, vous n'avez pas besoin d'invoquer la commande cat:
read
le comportement de "non droit [car] il tente de lire à partir du fichierfilename
") et de leurs accepté de répondre.