2017-08-30 10 views
0

Mon but est de lire l'entrée de l'utilisateur dans un tableau pour une utilisation ultérieure dans le script bash. Cela fonctionne en prenant l'entrée des utilisateurs et en la plaçant dans un tableau, mais seulement si l'utilisateur sait appuyer sur CTRL + D pour terminer la commande readarray. Y at-il un tableau de lecture à distance pour arrêter la lecture des lignes d'entrée une fois qu'il a atteint un mot-clé spécifique comme "fait" ou "fin"?readarray valeur d'arrêt du mot-clé

J'ai essayé regardant des moyens de mettre fin à la commande, mais je suis nouveau bash, donc je ne sais pas si cela est possible avec un certain temps/boucle, tels que:

echo Type 'done' when finished 
while true 
do 
    readarray -t serverlist 

if [ "$LINE" = "done" ] 
then 
    false 
fi 
done 
+0

probablement 'break'? . Bonne chance. – shellter

+0

Malheureusement, le code que j'ai est probablement erroné de plusieurs façons. Il ne termine même pas readarray sur CTRL + D, je pense qu'il crée une boucle vraie infinie. J'ai essayé de rompre, et le résultat est le même. Merci pour la réponse si! – Mormodes

+0

vous avez un 'done' qui ferme la boucle while? (non montré dans votre code ci-dessus, veuillez corriger). Bonne chance. – shellter

Répondre

1

readarray est va lire toutes ses entrées standard, y compris toute sentinelle comme done ou end avant de pouvoir le tester. Vous devrez lire la ligne d'entrée par ligne avec read et ajouter vous-même chaque ligne appropriée au tableau.

echo 'Print "done" when finished' 
while IFS= read -r line; do 
    [[ $line = done ]] && break 
    serverlist+=("$line") 
done 
+0

Merci @chepner, cela fonctionne, mais j'ai changé le "$ line = end" en "$ line = done", sinon il s'attend à ce que vous entriez "end" pour arrêter l'entrée. J'apprécie l'aide! – Mormodes