2011-07-18 58 views
0

我正在調用一個名爲arecord的程序(請參閱下面的代碼)。它需要麥克風輸入,然後按Ctrl + C來停止腳本的其餘部分。如何在調用程序後讀取輸入,給出:「讀取:讀取錯誤:0:資源暫時不可用」

接下來我希望它做的是閱讀我的輸入(C或R),看看它是否應該跳出循環

但是,輸入不讀,和錯誤「讀:讀取錯誤:0:資源暫時不可用「。

我想它與退出代碼或輸入流有關,但我不能再繼續。

#!/bin/bash 

while : 
do 
    # Record the audio 
    arecord -f cd -c 1 -t wav sound.wav 

    # Recording now finished, get user input 
    read -p "Continue or repeat recording? [c, r]: " input 
    if [ "${input}" == "c" ] 
    then 
     break 
    fi 
done 
+0

不幸的是,我無法找到解決方案。現在就試着用Python來做! – eoinoc

回答

0

答案並不簡單,這取決於如何處理arecordSIGINT(Ctrl + C),閱讀this如果你想了解究竟發生了什麼。無論如何,我會建議不要以這種方式使用SIGINT,但:

背景(與&末)運行arecord,得到PID(arecodr_pid=$!),然後readenoughkill -2 $arecodr_pid 後你可以做# Recording now finished, get user input

如果arecord知道要處理其他信號,可以使用kill -<signal num> $arecord_pid不要使用-9,工藝不能處理它,而且在大多數情況下,你出的文件將被損壞。

+0

因此,通過「閱讀足夠多的東西」,「殺死-2 $ arecodr_pid'」這樣可以讓我快速停止arecord錄音嗎?我很困惑,一旦我完成了聲音(這是可調節的長度),我會告訴它停止。 – eoinoc