2011-07-18 3 views
0

나는 아래 코드를 참조하여 프로그램을 호출하고 있습니다. 그것은 마이크 입력을 받아 들여 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

불행히도이 문제에 대한 해결책을 찾을 수 없었습니다. 지금 파이썬으로 해보려고합니다! – eoinoc

답변

0

대답은 그것은 arecordSIGINT (Ctrl + C)를 처리하는 방법에 따라 정확히 무슨 일이 일어나고 있는지 이해하려면, this을 읽고 간단하지 않다. 어쨌든, 나는 그런 식으로 SIGINT를 사용하지 않는 것이 좋습니다,하지만 것입니다 : (끝 &와) 배경

실행 arecord을, 다음 read 뭔가 enough, kill -2 $arecodr_pid 처럼 이후를 PID (arecodr_pid=$!)를 얻을 arecord가 다른 신호를 처리하기 위해 알고 있다면 당신은 # Recording now finished, get user input

을 할 수있는, 당신은 -9 사용하지 마십시오 kill -<signal num> $arecord_pid를 사용하여 프로세스를 처리 할 수 ​​있으며, 대부분의 경우에 밖으로 파일이 손상됩니다.

+0

그래서''충분하다 '',''kill -2 $ arecodr_pid' "라고 쓰면" "빨리 녹음을 멈출 수 있나요? 나는 내가 소리를 끝내면 멈추라는 말을하면 어리둥절 해. (길이는 조절 가능하다.) – eoinoc

관련 문제