當程序輸出某些內容到終端時,有什麼方法可以播放聲音嗎?在終端輸出上播放聲音
比方說,我跑:
$ for i in {0..10}; do echo $i; done
我可以播放聲音,或運行任何命令,在每一個新行打印?
更具體地說,我正在運行WEBrick for Rails開發,並且我想知道什麼時候有服務器請求而無需查看它。
(我使用的是Linux Mint的17猛砸)
當程序輸出某些內容到終端時,有什麼方法可以播放聲音嗎?在終端輸出上播放聲音
比方說,我跑:
$ for i in {0..10}; do echo $i; done
我可以播放聲音,或運行任何命令,在每一個新行打印?
更具體地說,我正在運行WEBrick for Rails開發,並且我想知道什麼時候有服務器請求而無需查看它。
(我使用的是Linux Mint的17猛砸)
這可能是一個非常複雜的解決方案,但它可以滿足我的需求。
在我的.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服務器的請求,而無需查看終端。
您可以檢查命令行驅動的聲音播放器一樣play
從sox 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
這會解決我編寫的腳本的問題,但是我不能控制的那些,比如'rails s'? –
你可以在這裏發佈,或者在github上發佈你正在談論的rails腳本嗎?我不確定我是否理解這個問題。 – franklin
感謝您使用'play'命令提示。我需要一個通用的解決方案,所以不需要改變腳本本身。如果您願意,可以「偵察」輸出。我會很快發佈我的解決方案。再次感謝提示,我在解決方案中使用它。 –
您可以嘗試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"
出於某種原因,'echo -e \ n'對我沒有任何幫助。我正在使用'paplay'來解決這個問題。謝謝您的幫助。 –
@fábio-queluci'echo -e \ n'在運行命令之前被shell翻譯爲'echo -e n'。不帶引號的'\'用於取消特殊字符。要發送'\ n'到一個命令,你必須把它放在一個帶引號的字符串中,比如'echo -e'\ n''或'echo -e「\ n」'。 – Aurium
謝謝你的擡頭。我試着「放」鍾\ a「',什麼也沒有,只是」鍾「。我查了一下,我認爲問題是我的筆記本電腦。 –
鐘形字符是否工作? 'echo -e「\ a」' – August
試試這個。 http://unix.stackexchange.com/questions/8607/how-can-i-play-a-sound-when-script-execution-is-ready基本上只需使用';'分隔符告訴BASH執行聲音文件一旦第一個命令完成。 – franklin
我只是得到一個空白行。 –