Bashスクリプト機能でspd-sayを使用する

Bashスクリプト機能でspd-sayを使用する

私はこれがかなり基本的なものであると確信していますが、それを理解することはできません。

私のスクリプト:

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

私が達成したいのは、関数内でspd-sayを使用してコンピュータに私に話すことです。

私の機能のエコー部分が動作します。予期した順序で入力した2行のテキストを出力します。しかし、spd-say部分はそうではありません。最後の行だけを言います。これは、2番目のコマンドが最初のコマンドの出力を同じ出力と並列に実行しようとするため、「上書きする」ためであると仮定します。 spd-say コマンドなどの機能内で sez コマンドの終わり、次の行に ;wait、&& など、さまざまな項目を追加しようとしましたが、試したことは役に立ちませんでした。

私は何が間違っていましたか?

答え1

同様の問題があり、解決策を見つけました。私はspd-sayを使わずにspeakを直接使用しました。

答え2

spd-say には適切なシェル環境が必要です。 cronは通常のシェル環境でジョブを実行しません。

次の例のようにスクリプトを変更できます。

#!/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-define-in-bashrc-and-bash-profile

関連情報