2016-09-22 7 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 

なぜこのコードはUbuntuで動作しませんか?次のコードを実行すると、それが実行されます。なぜ "読み取り"コマンドが機能しないのですか?

#!/bin/bash 
while read user; 
do 
echo "Do you want to send the message to $user?" 
done < users 

答えて

3

端末からの応答を読み取る必要があるため、ユーザの応答には</dev/ttyを使用してください。または、より具体的には、からの入力には/proc/$$/fd/0を使用できます。

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

慣用的なやり方は、ファイル「users」を読み込むために別のファイル記述子を使用することです。 –

+0

'IFS =" "read -r'は、空白を保存するのに理想的です。 – Inian

+0

ありがとう@Inian、あなたはいつも私の間違いを訂正します。ありがとう。 –

関連する問題