web-dev-qa-db-ja.com

ターミナルの各コマンドを異なるメッセージまたはサウンドで自動的に終了します

SVOX pico2wave をインストールし、スクリプトを作成しました。今私が入るとき:

speech "Hello world"

コンピューターのテキスト音声エンジンが「Hello world」と大声で言います。さらに、.bashrcで変数Prompt_COMMANDを次のように定義して使用します。

Prompt_COMMAND="speech 'Command executed.'"

そのため、ニースのテキスト音声エンジンは、ターミナルでプロンプトを返す前に、コマンドが実行されたことを大声で知らせます。

しかし、これはしばらくすると退屈になり、コンピューターでテキストのdifferent行(Starshipの自動操縦を考えて企業)。

そこで、さまざまなメッセージを使用して、.bashrcに配列変数を作成しました。

array[0]="Shields at 90%"
array[1]="Engaging proton overdrive"
array[2]="Autopilot disengaged"
array[3]="Targetting solution available"
array[4]="Alert. Incoming missile."
array[5]="Deploying countermeasures."
array[6]="Firing torpedoes."
array[7]="Engaging auto-cannon."
array[8]="Severe damage on deck 17. Sealing off."
array[9]="Deploying repair droids to deck 17."

私が望むのは、eachターミナルでコマンドを実行するたびに、変数Prompt_COMMANDを更新してdifferent配列内のランダムな行。

ループが必要だと思いますが、ループの作り方がわかりませんでした。

どんな助けにも感謝します。ありがとうございました。

21
RazTaz

スクリプトを作成し、行と、配列からランダムな行を選択し、その行でspeechコマンドを呼び出すロジックを含む場所に保存します。

array[0]="Shields at 90%"
array[1]="Engaging proton overdrive"
array[2]="Autopilot disengaged"
array[3]="Targetting solution available"
array[4]="Alert. Incoming missile."
array[5]="Deploying countermeasures."
array[6]="Firing torpedoes."
array[7]="Engaging auto-cannon."
array[8]="Severe damage on deck 17. Sealing off."
array[9]="Deploying repair droids to deck 17."

line=${array[$RANDOM % ${#array[@]}]}
speech "$line"

次に、.bashrcまたは.profilePrompt_COMMANDを設定します。

Prompt_COMMAND="bash $HOME/PATH/TO/myscript.sh"

speechechoに置き換えるだけで、音声ではなくメッセージを取得できます。

22
Ravexina

後編チュートリアル:

上記のRavexinaの回答のおかげで、問題は解決され、解決策は素晴らしく機能します。 Ubuntu 18.04で動作するようにしたい他の人々のために、ステップバイステップの手順を以下に示します。

1。SVOX pico2waveパッケージをインストール:

Sudo apt-get install libttspico0 libttspico-utils libttspico-data libsox-fmt-mp3

2。音声スクリプトの作成

cd ~/scripts
gedit speech

このコンテンツを内部に配置し、正しいユーザーをパスに挿入します。

#!/bin/bash
pico2wave -l=en-US -w=/home/user/test.wav "$1"
aplay -q ~/test.wav
rm /home/user/test.wav

保存して終了。

。上記のRavexinaが示すようにShell_speech.shスクリプトを作成します:

gedit Shell_speech
array[0]="Shields at 90%"
array[1]="Engaging proton overdrive"
array[2]="Autopilot disengaged"
array[3]="Targetting solution available"
array[4]="Alert. Incoming missile."
array[5]="Deploying countermeasures."
array[6]="Firing torpedoes."
array[7]="Engaging auto-cannon."
array[8]="Severe damage on deck 17. Sealing off."
array[9]="Deploying repair droids to deck 17."

line=${array[$RANDOM % ${#array[@]}]}
speech "$line"

保存して終了。

4。スクリプトを実行可能にし、ディレクトリをPATHに追加して、どこからでも呼び出せるようにします:

chmod u+x ~/scripts/bin/speech
chmod u+x ~/scripts/bin/Shell_speech
export PATH=$PATH:~/scripts

5。bashrcを変更

gedit ~/.bashrc

次の行を追加します。

Prompt_COMMAND="bash Shell_speech"

保存して閉じます

注:~/scripts/bin/Shell_speechの配列に必要な数の新しい行を追加できます

4
RazTaz