Terminaldeki her komutu farklı bir mesajla veya sesli olarak otomatik olarak sonlandır


21

Ben yüklü SVOX pico2wave ve bir komut dosyası oluşturdu. Şimdi girdiğimde:

speech "Hello world"

Bilgisayardan metne ses motoru yüksek sesle "Merhaba dünya" diyor. Ayrıca, tanımlanan .bashrcdeğişkende kullanıyorum PROMPT_COMMAND:

PROMPT_COMMAND="speech 'Command executed.'"

Bu nedenle, sesli güzel metin motoru, komut istemini terminale döndürmeden önce komutun yürütüldüğünü yüksek sesle duyurdu.

Ancak, bir süre sonra bu sıkıcı olmaya başlıyor ve her komutun bilgisayarın farklı bir metin satırı konuşmasına son vermesinin gerçekten harika olacağını düşündüm (Starship Enterprise'ın otopilotunu düşünün).

Böylece .bashrc'de farklı mesajlarla bir dizi değişkeni yarattım:

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

Ne, istiyorum ki her ı terminali içinde bir komut çalışma süresi, değişken PROMPT_COMMANDgüncellenmiş ve okunacak farklı dizide rasgele çizgi.

Sanırım bir döngüye ihtiyacım var ama nasıl yapacağımı bilmiyordum.

Her türlü yardım için minnettar olurum. Teşekkür ederim.


Bağlantılı cevaptaki komut dosyasında -l=de-DE, yerel dilinize benzer şekilde değiştirdiğinizden emin olun -l=en-US.
Terrance

Gerçekten teşekkürler. Bununla ilgilenilmesi gerekiyor, ama ben yaptım.
RazTaz

Evet, bu genel olarak bir yorum. Burada oldukça iyi fikir! +1
Terrance

Sadece merak ediyorum - nasıl speechyürütülebilir yükleyebilirim ? Takma adı için espeakmi?
N0rbert

1
"Konuşma" bir senaryo. Bağlantıdaki talimatları takip ettim. Terrance tarafından yukarıda belirtilen düzeltmeler de dahil olmak üzere speech.sh adlı bir komut dosyası yaptım ". Speech.sh dosyasını ~ / scripts klasörüme kaydettim. Yürütülebilir hale getirmek için speech.sh için dosya izinlerini değiştirdim. ~ / scripts / bin ve
PATH'e

Yanıtlar:


22

Bir komut dosyası oluşturun ve dizinizden rastgele bir satır seçmek ve speechbu satırdaki arama komutunu seçmek için satırlarınızı ve mantığınızı içeren bir yere kaydedin :

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"

Sonra .bashrcya da .profilesetinizde PROMPT_COMMAND:

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

Sadece yerini speechile echoyerine sesinin Messge olsun.


Yukarıdaki çözüm için teşekkürler. İlk kelimeyi rastgele satırda (ör. "Kalkanlar." Veya "Dağıtma ..") yalnızca tüm satırı değil (ör. "% 90'daki Kalkanlar" veya "Onarım droidlerini dağıtma) dek 17. "
RazTaz

@RazTaz Bir şey değil;)
Ravexina

${array[$RANDOM % ${#array[@]}]}İkili tırnak içinde olmamalı mı ?
Mad Physicist

@MadPhysicist İyi bir uygulama ama burada gerekli değil, set -xneden bahsettiğimi görmek için senaryoyu çalıştırın :)
Ravexina

4

Sonradan Öğreticiyi Düzenle:

Ravexina'nın yukarıdaki cevabı sayesinde şimdi sorun çözüldü ve çözüm fevkalade işe yarıyor. Ubuntu 18.04’de çalışması için ilgilenen diğer kişiler için aşağıda adım adım talimatlar vereceğim.

1. SVOX pico2wave paketini kurun:

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

2. Konuşma komut dosyasını oluşturun

cd ~/scripts
gedit speech

ve bu içeriği içeriye sokarak doğru kullanıcıyı yola sokun:

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

kaydet ve çık.

3. Yukarıdaki Ravexina tarafından belirtildiği şekilde shell_speech.sh betiğini oluşturun:

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"

kaydet ve çık.

4. Komut dosyalarını çalıştırılabilir hale getirin ve dizinlerini PATH'e ekleyin, böylece her yerden çağrılabilirler:

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

5. .bashrc'yi değiştirin

gedit ~/.bashrc

aşağıdaki satırı ekleyin:

PROMPT_COMMAND="bash shell_speech"

kaydet ve kapat

Not: Dizideki dizgilere istediğiniz kadar yeni satır ekleyebilirsiniz.~/scripts/bin/shell_speech


Eğer komut dosyası çalıştırılabilir ve yaptık beri PATH, eklemek gerekmez bashGözlerinde farklı PROMPT_COMMANDve bunu daha sonra ertelenen yürütme olması gerekir Eğer başka şeyler eklemek durumunda tek tırnak kullanmak istiyorsunuz:PROMPT_COMMAND='shell_speech'
Durduruldu kadar başka uyarı.

1
Güvenlik nedeniyle /bin/bashbasit yerine yazmak daha iyidir bash... (birisi daha önce yolunuza başka bir bash koysa iyi bir uygulama /bin...). Hatta sana bir önermek gerekir geçici rastgele dosya içinde /tmpdizine yerine o test.wav> ev ... ps o bir görünüm vermek servet .
Hastur

@Hastur, varsayımınızın hangi koşullar altında gerçekleşebileceğini bir an düşünün (örneğin, "/ bin önce yolunuza başka bir bash koyunuz"). Bu, yalnızca birinin bilgisayarınıza fiziksel erişimi varsa ve / veya daha önce ayrıcalıklarına sahipse mümkündür. Her iki durumda da, çözümünüz sorunu çözmüyor.
RazTaz

@RazTaz Dünyası sadece siyah ve beyaz değil, renklerle dolu ! :-). Maalesef, bir sistemde kısmi ayrıcalıklara sahip olmanın ve bunun yalnızca bashdaha fazlasını elde etmenin bir yolunu kullanmanın birçok yolu vardır. Bağlantılar, komut dosyaları, açık dizinler üzerine yazma izni, paylaşılanlar ... Ayrıca - siz onu kaçırabilirsiniz - senaryolar ilk amaçlarına veya sahiplerine hayatta kalabilir ... ve siz (veya bir başkası) yeterli zamandan sonra bunları kullanabilir farklı koşullar altında içine yazılmış tüm komutları hatırlamıyorsunuz (bunun için yapıyoruz). Söylemek gerekirse \bin\bashaçık yolu ile olan iyi bir uygulama. Yapmamak için ... bir risk.
Hastur
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.