BASH:在不等待其他进程的情况下收听用户输入

时间:2016-09-07 17:38:00

标签: linux bash input process while-loop

好的,我有一个简单的脚本,结构如下。我有这个子过程将无限期地运行。截至目前,它只会在用户手动杀死进程时停止。我想知道是否有办法听取用户的输入而不会卡在read行。换句话说,当子流程正在运行时,在后台查看用户是否键入"退出\n"在终端。

...

if [[ option = "3" ]]; then
    while [2 -lt 4]; #THIS IS WHERE I WANT TO CHANGE TO LISTENING FOR INPUT TO QUIT
        #Some sub process that continues to run
    done
fi

....

感谢您的帮助!对不起,如果措辞严厉,我无法想出一个更好的方式来描述这个问题。至于我的头脑风暴尝试,我知道可以只使用while条件中的变量并说这样做直到它等于"退出",但是将该变量设置为输入是我迷路的地方。

1 个答案:

答案 0 :(得分:0)

不确定我是否理解正确,但您是否在寻找类似的东西?

while [[ 2 -lt 4 ]] ; do
        read -t .1 user_input
        [[ ${user_input} == "exit" ]] && exit 0
done

或者更简单:

unset user_input
while [[ "${user_input}" != "exit" ]] ; do
        read -t .1 user_input
done

一般情况下,您可以使用read -t实现所需目标。

  

-t超时                        如果完整的输入行(或规范)导致读取超时并返回失败                        超时秒内未读取if个字符数。超时可能是一个                        十进制数,小数点后面的小数部分。这个                        选项仅在读取来自终端,管道或其他的读取输入时有效                        特殊档案;从常规文件中读取时没有任何效果。如果阅读时间                        out,read将任何部分输入读取保存到指定的变量名称中。如果                        超时为0,读取立即返回,而不尝试读取任何数据。该                        如果输入在指定的文件描述符上可用,则退出状态为0,非零                        除此以外。如果超出超时,则退出状态大于128.