我正在调用名为arecord的程序(请参阅下面的代码)。它接收麦克风输入,然后按Ctrl + C继续播放其余的脚本。
我接下来要它做的是读取我的输入(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 :(得分:0)
答案并不简单,取决于arecord
如何处理SIGINT
(ctrl + c),如果您想了解究竟发生了什么,请阅读this。无论如何,我建议不要以这种方式使用SIGINT,但是:
在后台运行arecord
(结尾为&
),获取pid(arecodr_pid=$!
),然后read
类似 enough
,kill -2 $arecodr_pid
之后你可以# Recording now finished, get user input
如果arecord
知道处理其他信号,您可以使用kill -<signal num> $arecord_pid
不要使用-9,进程无法处理它,并且在大多数情况下,您的out文件将被破坏。
答案 1 :(得分:0)
您可以尝试直接从tty阅读:
read -p "Your prompt " -r </dev/tty
而不是简单地:
read -p "Your prompt " -n 1 -r
在有类似问题的脚本中,它起作用了。