1 votes

Spd-say ne prononce pas l'argument

J'ai écrit un script et la première partie ne fonctionne pas :

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

Lorsque j'exécute le code, la première partie pose la question mais quelle que soit ma réponse, elle passe à la deuxième question, alors que la deuxième partie après "Payez l'argent" fonctionne bien. Je ne sais pas pourquoi, mais la structure des deux parties est la même. Quelqu'un peut-il m'aider ?

6voto

PerlDuck Points 12079

Pour ceux qui ne le savent pas (je ne le savais pas non plus) : spd-say lire un texte donné à haute voix (par exemple, si vous ne savez pas lire vous-même ou si vous préférez écouter plutôt que lire).

Votre script a l'air bien mais vous êtes tombé dans un piège :

spd-say n'attend pas qu'il ait prononcé le texte donné. Au lieu de cela, la commande revient (presque) immédiatement et continue à parler en arrière-plan. Si vous l'exécutez une deuxième fois sans attendre que la première partie soit terminée (comme dans votre script), alors elle parlera simplement par-dessus la première partie. Pour éviter cela, utilisez la fonction -w (o --wait ) interrupteur. Ensuite, spd-say ne reviendra que lorsqu'il aura terminé de parler. Voir le Manpage pour d'autres interrupteurs.

Ainsi, au lieu de

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

utiliser

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X