Spd-say não pronuncia o argumento

2

Eu escrevi um script e a primeira parte não funciona:

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

Quando eu executo o código, a primeira parte faz a pergunta, mas, independentemente da minha resposta, ela pula para a segunda pergunta, enquanto a segunda parte depois de "Pay the money" funciona bem. Eu não sei porque, mas a estrutura de ambas as partes é a mesma. Alguém pode ajudar?

    
por Arch 29.05.2018 / 14:43

1 resposta

6

Para quem não sabe (eu também não): spd-say lê um determinado texto em voz alta (por exemplo, se você não consegue ler a si mesmo ou gosta de ouvir em vez de ler).

Seu script parece ótimo, mas você caiu em uma armadilha:

spd-say não espera até que tenha falado o texto fornecido. Em vez disso, o comando (quase) retorna imediatamente e continua falando em segundo plano. Se você executá-lo pela segunda vez sem esperar que a primeira conversa seja concluída (como em seu script), ela simplesmente será discutida na primeira parte. Para evitar isso, use a opção -w (ou --wait ). Então, spd-say retornará somente quando tiver concluído a conversa. Veja a página de manual para mais opções.

Então, em vez de

spd-say " Sorry, we don't have water, choose something else."

use

spd-say --wait " Sorry, we don't have water, choose something else."
    
por PerlDuck 29.05.2018 / 15:24