2016-09-22 3 views
1
#!/bin/bash 
while read user; 
do 
echo "Do you want to send the message to $user?" 
read response 
case $response in 
Y|y) echo The message was sent;; 
N|n) echo The message was not sent;; 
Q|q) exit;; 
esac 
done < users 

Warum funktioniert dieser Code nicht auf Ubuntu? Wenn ich den nächsten Code starte, wird es gemacht;Warum Befehl "lesen" funktioniert nicht?

Antwort

3

Sie müssen die Antwort vom Terminal lesen, also verwenden Sie </dev/tty für Benutzerantwort. Genauer gesagt kann /proc/$$/fd/0 für die Eingabe von stdin verwendet werden.

#!/bin/bash 
while read user; 
do 
echo "Do you want to send the message to $user?" 
IFS="" read -r response </dev/tty # OR < /proc/$$/fd/0 
case $response in 
Y|y) echo The message was sent;; 
N|n) echo The message was not sent;; 
Q|q) exit;; 
esac 
done < users 
+2

Die idiomatische Methode besteht darin, einen anderen Dateideskriptor zum Lesen der Datei 'users' zu verwenden. –

+0

'IFS =" "read -r" wäre ideal, um Leerräume zu erhalten. – Inian

+0

danke @Inian, korrigieren Sie immer meine Fehler. Vielen Dank. –

Verwandte Themen