Автоматично закінчуйте кожну команду в терміналі іншим повідомленням або звуком


21

Я встановив 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повинна оновлюватися і читати різні випадкові рядки в масиві.

Я припускаю, що мені потрібна петля, але я не знав, як це зробити.

Я був би найвдячніший за будь-яку допомогу. Дякую.


У сценарії зв'язаної відповіді переконайтеся, що ви змінили -l=de-DEна свою місцеву мову -l=en-US.
Терранс

Дякую, справді. Про це потрібно подбати, але я це зробив.
RazTaz

Так, це взагалі лише коментар. Дуже класна ідея тут! +1
Терранс

Просто цікаво - як я можу встановити speechвиконуваний файл? Це псевдонім espeak?
N0rbert

1
"мова" - це сценарій. Я слідував інструкціям за посиланням. Я створив скрипт, який називається govor.sh, включаючи виправлення, зазначені вище Terrance ". Я зберег word.sh у папці ~ / scriptpts. Я змінив дозволи файлу на word.sh, щоб зробити його виконуваним. Я створив папку наступним чином: ~ / scriptpts / bin і дотримуйтесь інструкцій звідси stackoverflow.com/a/20054809 , щоб додати його до PATH, щоб сценарій можна було визнати виконуваним, де б я не
знаходився

Відповіді:


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"

Просто замініть speechз , echoщоб отримати messge замість голосу.


Дякуємо за вищезазначене рішення. Здається, він працює, за винятком того, що він видає лише перше слово у випадковому рядку (наприклад, "Щити" або "Розгортання ..") не для всього рядка (наприклад, "Щити на 90%" або "Розгортання ремонтних дроїдів на дек 17. "
РазТаз

@RazTaz Ласкаво просимо;)
Ravexina

Не повинно ${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. Створіть скрипт 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... (хороша практика на випадок, якщо хтось поклав на ваш шлях ще один удар /bin). Я б навіть запропонував вам тимчасовий випадковий файл у /tmpкаталозі, а не test.wavу вашому домі ... ps> придивіться до щастя .
Гастур

@Hastur подумайте хвилинку, за яких обставин ваше припущення може стати істинним (тобто "хтось поставив інший удар на ваш шлях до / бін"). Це можливо лише в тому випадку, якщо хтось або має фізичний доступ до вашого комп’ютера та / або вже прискорив привілеї. За обох обставин ваше рішення не вирішує проблему.
RazTaz

@RazTaz Світ повний кольорів, а не тільки чорного та білого ! :-). На жаль, існує маса способів отримати часткові привілеї в системі, а використовувати лише bashце спосіб отримати більше. Посилання, скрипт, дозвіл на написання у відкритих каталогах, спільні ... Більше того - ви можете пропустити це - сценарії можуть вижити до першої мети або власника ... і ви (або хтось інший) можете використовувати їх через достатньо часу, ви не пам’ятаєте всіх команд, написаних всередині (ми робимо для цього), за різних умов. Додано \bin\bashявний шлях - це хороша практика. Щоб уникнути цього ... ризик.
Гастур
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.