Автоматически закончите каждую команду в терминале с различным сообщением или звуком

Я установил SVOX pico2wave и создал сценарий. Теперь, когда я вхожу:

speech "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 быть обновленным и читать другую случайную строку в массиве.

Я предполагаю, что мне нужен цикл, но я не знал, как сделать его.

Я был бы крайне признателен за любую справку.Спасибо.

21
задан 22 September 2018 в 03:05

2 ответа

Создайте сценарий и сохраните его где-нибудь, который содержит Ваши строки и логику для выбора случайной строки из массива и вызова 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"

Просто замените speech с echo получить messge вместо речи.

22
ответ дан 23 November 2019 в 01:44

Более позднее учебное руководство по редактированию:

Благодаря ответу 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. Создайте shell_speech.sh сценарий, как обозначено Ravexina выше:

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. Сделайте исполняемый файл сценариев и добавьте их каталог для СОЕДИНЕНИЯ КАНАЛОМ так, чтобы их можно было назвать отовсюду:

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
ответ дан 23 November 2019 в 01:44

Другие вопросы по тегам:

Похожие вопросы: