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


21

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

speech "Hello world"

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

PROMPT_COMMAND="speech 'Command executed.'"

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

しかし、これはしばらくすると退屈になります。ターミナルで各コマンドを終了し、コンピューターが異なるテキスト行を話すのは本当にクールだと思いました(Starship Enterpriseの自動操縦を考えてください)。

そこで、.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."

私が望むのは、ターミナルでコマンドを実行するたびに、変数PROMPT_COMMANDが更新され、配列内の異なるランダムな行を読み取ることです。

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

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


リンクされた回答のスクリプトで、の-l=de-DEようにローカル言語に変更してください-l=en-US
テランス

本当にありがとう。これは世話をする必要がありますが、私はそれをやった。
RazTaz

ええ、それは一般的なコメントです。ここでかなりクールなアイデア!+1
テランス

好奇心が強い-どうすればspeech実行可能ファイルをインストールできますか?のエイリアスespeakですか?
-N0rbert

1
「音声」は台本です。リンクの指示に従いました。私は、speech.shを〜/ scriptsフォルダーに保存しました。ファイルのアクセス許可をspeech.shに変更して実行可能にしました。次のようにフォルダーを作成しました。 〜/スクリプト/ binと、ここからの指示に従っstackoverflow.com/a/20054809、スクリプトが実行可能ファイルとして認識できるように、PATHに私は関係なく、それを追加するためインチ
RazTaz

回答:


22

スクリプトを作成し、行と、配列からランダムな行を選択し、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または.profileセットでPROMPT_COMMAND

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

ただ、交換するspeechecho代わりに音声のmessgeを取得します。


上記の解決策をありがとう。ランダムな行の最初の単語(例: "Shields。"または "Deploying ..")のみをレンダリングし、行全体(たとえば "Shields at 90%"または "Deploying repair droids on dek 17. "
-RazTaz

@RazTazどういたしまして;)
ラヴェクシーナ

${array[$RANDOM % ${#array[@]}]}二重引用符で囲むべきではありませんか?
マッド物理学者

@MadPhysicistこれは良い習慣ですが、ここでは必要ありません。スクリプトを実行して、set -x私が話していることを確認してください:)
Ravexina

4

後で編集チュートリアル:

上記の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

保存して終了。

3.上記の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


あなたがスクリプトが実行可能として行ったのでPATH、あなたは含める必要はありませんbash、あなたの中でPROMPT_COMMAND、私は、実行延期されている必要がありますあなたは、後で他のものを追加する場合は、単一引用符を使用します:PROMPT_COMMAND='shell_speech'
追って通知があるまで一時停止します。

1
セキュリティ上の理由から/bin/bash、単純なbash...の代わりに書く方が良いです(誰かがあなたのパスに別のbashを前に置いた場合に備えて良い習慣/binです...)。私はあなたの家ではなくディレクトリに一時的なランダムファイルを提案する必要があります... ps>それに幸運を見てください。/tmptest.wav
ハスター

@Hasturは、どのような状況下で仮定が成り立つかについて少し考えます(つまり、「/ binの前に誰かがパスに別のbashを置く」)。これは、誰かがあなたのコンピューターに物理的にアクセスできるか、既に特権を昇格している場合にのみ可能です。どちらの状況でも、解決策は問題を解決しません。
RazTaz

@RazTaz世界は、色の完全なだけではなく、!:-)。残念ながら、システム上で部分的な特権bashを得る方法はたくさんありますが、それを使用する方法はそれ以上を取得する方法です。リンク、スクリプト、オープンディレクトリへの書き込み許可、共有ディレクトリ...さらに、見落とす可能性があります-スクリプトは最初の目的または所有者まで生き残ることができます...さまざまな条件下で、内部に記述されたすべてのコマンドを覚えているわけではありません(そのために行っています)。置くために\bin\bash明示的なパスをすることはある良い練習。それを避けるために...リスク。
ハスター
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.