2015-01-08 70 views
0

當程序輸出某些內容到終端時,有什麼方法可以播放聲音嗎?在終端輸出上播放聲音

比方說,我跑:

$ for i in {0..10}; do echo $i; done

我可以播放聲音,或運行任何命令,在每一個新行打印?

更具體地說,我正在運行WEBrick for Rails開發,並且我想知道什麼時候有服務器請求而無需查看它。

(我使用的是Linux Mint的17猛砸)

+0

鐘形字符是否工作? 'echo -e「\ a」' – August

+0

試試這個。 http://unix.stackexchange.com/questions/8607/how-can-i-play-a-sound-when-script-execution-is-ready基本上只需使用';'分隔符告訴BASH執行聲音文件一旦第一個命令完成。 – franklin

+0

我只是得到一個空白行。 –

回答

2

這可能是一個非常複雜的解決方案,但它可以滿足我的需求。

在我的.bashrc文件,我增加了以下內容:

#ensure that the call is made only once, preventing an infinite loop 

if [ $SHLVL == 1 ] 
then 
    script -afq ~/custom/log.txt #log everything that happens in the shell 
fi 

#call my script only once by checking for another instance of it 

if [[ ! $(pidof -x script.sh) ]] 
then 
    ~/custom/script.sh& 
fi 

我script.sh文件檢查在log.txt的變化並播放提示音(需要下載)當這種情況發生:

#!/bin/bash 

$(stat -c %y ~/custom/log.txt > ~/custom/update.txt) 

while : 
do 
    now=$(stat -c %y ~/custom/log.txt) 
    update=$(cat ~/custom/update.txt) 
    if [ "$now" != "$update" ] 
    then 
     $(stat -c %y ~/custom/log.txt > ~/custom/update.txt) 
     $(play -q ~/custom/beep.ogg vol 0.1) #props to franklin 
    fi 
done 

,這樣每次東西殼,包括打字改變這將使它,script.sh將運行play。現在我知道,只要有WEBrick服務器的請求,而無需查看終端。

2

您可以檢查命令行驅動的聲音播放器一樣playsox package

然後,您可以簡單地編寫for循環,以便每次迭代成功時執行play程序。

for i in {0..10}; do 
    # do your stuff here, presumably something like: 
    `ruby /path/to/script.rb` 
    echo $i 
    `play /path/to/notification.ogg` 
done 
+0

這會解決我編寫的腳本的問題,但是我不能控制的那些,比如'rails s'? –

+0

你可以在這裏發佈,或者在github上發佈你正在談論的rails腳本嗎?我不確定我是否理解這個問題。 – franklin

+0

感謝您使用'play'命令提示。我需要一個通用的解決方案,所以不需要改變腳本本身。如果您願意,可以「偵察」輸出。我會很快發佈我的解決方案。再次感謝提示,我在解決方案中使用它。 –

3

您可以嘗試AASCII 「鍾字符」(07),其景觀CHAR(\a)上echo命令。

您必須使用「echo -e」來從輸入字符串中解析轉義字符。例如:echo -e "line 1\nline 2"

此處瞭解詳情: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/bash-prompt-escape-sequences.html

在bash,你可以這樣做:

for i in {0..10}; do echo -e "$i\a"; sleep 0.2; done 

您可以在Ruby中使用相同的景觀CHAR(我做了IRB測試)。直接在你的Rails應用上試試吧:

puts "bell\a" 
+0

出於某種原因,'echo -e \ n'對我沒有任何幫助。我正在使用'paplay'來解決這個問題。謝謝您的幫助。 –

+0

@fábio-queluci'echo -e \ n'在運行命令之前被shell翻譯爲'echo -e n'。不帶引號的'\'用於取消特殊字符。要發送'\ n'到一個命令,你必須把它放在一個帶引號的字符串中,比如'echo -e'\ n''或'echo -e「\ n」'。 – Aurium

+0

謝謝你的擡頭。我試着「放」鍾\ a「',什麼也沒有,只是」鍾「。我查了一下,我認爲問題是我的筆記本電腦。 –