Spd-say 不发音参数

1 bash

我写了一个脚本,第一部分不起作用:

#!/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
Run Code Online (Sandbox Code Playgroud)

当我执行代码时,第一部分提出问题,但不管我的回答如何,它都会跳到第二个问题,而“付钱”之后的第二部分效果很好。我不知道为什么,但这两个部分的结构是一样的。任何人都可以帮忙吗?

Per*_*uck 6

对于那些不知道的人(我也不知道):spd-say大声朗读给定的文本(例如,如果您无法阅读自己或喜欢听而不是阅读)。

您的脚本看起来不错,但您陷入了陷阱:

spd-say不会等到它说出给定的文本。相反,命令(几乎)立即返回并在后台继续说话。如果您第二次运行它而不等待第一次对话完成(就像在您的脚本中一样),那么它只会讨论第一部分。为防止出现这种情况,请使用-w(或--wait) 开关。然后spd-say只有在完成通话后才会返回。有关更多开关,请参阅手册页

所以代替

spd-say " Sorry, we don't have water, choose something else."
Run Code Online (Sandbox Code Playgroud)

spd-say --wait " Sorry, we don't have water, choose something else."
Run Code Online (Sandbox Code Playgroud)