다른 메시지 나 소리로 터미널의 각 명령을 자동으로 종료


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.
Terrance

정말 고마워. 이것은 돌봐야하지만, 나는 그것을했다.
RazTaz

예, 그것은 일반적인 의견 일뿐입니다. 여기 아주 멋진 아이디어! +1
Terrance

궁금한 점- speech실행 파일을 어떻게 설치할 수 있습니까? 별명 espeak입니까?
N0rbert

1
"음성"은 스크립트입니다. 나는 링크의 지시를 따랐다. 위의 Terrance 수정 내용을 포함하여 speech.sh라는 스크립트를 만들었습니다. ". ~ / scripts 폴더에 speech.sh를 저장했습니다. 파일 권한을 speech.sh로 변경하여 실행 가능하게 만들었습니다. 다음과 같이 폴더를 만들었습니다. ~ / scripts / 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 %"또는 "Droid 배포 복구) dek 17. "
RazTaz

@RazTaz 천만에;)
Ravexina

${array[$RANDOM % ${#array[@]}]}따옴표에있을?
Mad Physicist

@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

.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

@Hastur는 어떤 가정 하에서 가정이 사실이 될 수 있는지 잠시 동안 생각합니다 (예 : "누군가가 / bin 앞에 다른 bash를 넣었 음"). 이것은 누군가가 컴퓨터에 물리적으로 액세스하거나 이미 에스컬레이션 된 권한이있는 경우에만 가능합니다. 두 가지 상황에서 솔루션이 문제를 해결하지 못합니다.
RazTaz

@RazTaz 세계는, 색상의 전체 단지 아닌 검은 색흰색 ! :-). 불행히도 시스템에 대한 부분 권한을 갖는 많은 방법이 있으며, bash더 많은 것을 얻는 방법 만 사용 하는 것입니다. 링크, 스크립트, 공개 디렉토리, 공유 디렉토리에 대한 쓰기 권한 ... 또한-누락 될 수 있습니다-스크립트는 첫 번째 목표 나 소유자에게도 생존 할 수 있습니다. 다른 조건에서 내부에 작성된 모든 명령을 기억하지는 않습니다. 말하자면 \bin\bash명시 적 경로로하는 것입니다 것이 좋습니다. 그렇게하지 않으려면 ... 위험.
Hastur
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.