如何在调用程序后读取输入,给出:“读取:读取错误:0:资源暂时不可用”

时间:2011-07-18 05:57:31

标签: bash unix

我正在调用名为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

2 个答案:

答案 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

在有类似问题的脚本中,它起作用了。