我写了一个脚本,但第一部分不起作用:
#!/bin/bash
spd-say "What do you want?"
read a
if [ "$a" == "water" ] || [ "$a" == "Water" ]
then
spd-say "Take the bottle."
else
spd-say "Sorry, we don't have water, choose something else."
fi
spd-say "Please pay the money."
read b
if [ "$b" == "yes" ] || [ "$b" == "Yes" ]
then
spd-say "Thanks."
else
spd-say "Sorry!"
fi
当我执行代码时,第一部分会提出问题,但无论我如何回答,它都会跳到第二个问题,而“付钱”之后的第二部分则运行良好。我不知道为什么,但两部分的结构是一样的。有人能帮忙吗?
答案1
对于那些不知道的人(我也不知道):spd-say
大声朗读给定的文本(例如,如果你不能自己阅读或者喜欢听而不是读)。
你的脚本看上去不错,但是你陷入了一个陷阱:
spd-say
不会等到它说出给定的文本。相反,命令(几乎)立即返回并在后台继续说话。如果您第二次运行它而不等待第一次说话完成(就像在您的脚本中一样),那么它只会谈论第一部分。为了防止这种情况,请使用-w
(或--wait
)开关。然后spd-say
只有在它完成说话后才会返回。请参阅手册页进行进一步的切换。
因此,
spd-say " Sorry, we don't have water, choose something else."
使用
spd-say --wait " Sorry, we don't have water, choose something else."