在 bash 脚本函数中使用 spd-say

在 bash 脚本函数中使用 spd-say

我确信这是相当基本的,但我无法弄清楚。

我的脚本:

#!/bin/bash
sez ()
{
  echo $1
  spd-say "$1"
}
sez "does this work"
sez "this does work"

我想要实现的是在函数中使用 spd-say 让计算机与我对话。

我的函数的 echo 部分有效。它输出我按预期顺序提供给它的两行文本。然而, spd-say 部分却没有。它只说了最后一行。我假设这是因为第二个命令“覆盖”了第一个命令的输出,因为它试图与相同的输出并行运行它们。我尝试将 ;wait、&& 以及各种其他内容添加到 sez 命令的末尾、之后的下一行、spd-say 命令的函数内等,但我尝试的一切都没有帮助。

我究竟做错了什么?

答案1

我遇到了类似的问题,并且找到了解决方法。我没有使用 spd-say 直接使用 espeak。

答案2

spd-say 需要合适的 shell 环境。 cron 不在常规 shell 环境中执行任务。

您可以尝试更改脚本,如下例所示:

#!/bin/bash
source $HOME/.profile
sez ()
{
  echo $1
  spd-say "$1"
}
sez "does this work"
sez "this does work"

另请参阅此问题以获取更多信息:http://unix.stackexchange.com/questions/67940/cron-ignores-variables-defined-in-bashrc-and-bash-profile

相关内容