好的,我有一个简单的脚本,结构如下。我有这个子过程将无限期地运行。截至目前,它只会在用户手动杀死进程时停止。我想知道是否有办法听取用户的输入而不会卡在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
条件中的变量并说这样做直到它等于"退出",但是将该变量设置为输入是我迷路的地方。
答案 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.