Bash 使用stty-icanon时如何读取返回

Bash 使用stty-icanon时如何读取返回,bash,stty,Bash,Stty,我在设置stty-icanon time 0 min 0后有一个循环,以防止读取阻塞 除了无法读取回车键外,它工作正常 有没有办法在这种模式下读取enter键,或者有没有其他方法可以编写我的代码 相关代码 您可以使用Readby来完成此操作 不稳定的国际单项体育联合会 不使用任何行分隔符 一次只读取1个字符 例如,在此处输入一个空格,然后返回: $IFS=read-t0.01-s-d'-n1按键;回显“\”$keypress” “a” $IFS=read-t0.01-s-d'-n1按键;回

我在设置stty-icanon time 0 min 0后有一个循环,以防止读取阻塞

除了无法读取回车键外,它工作正常

有没有办法在这种模式下读取enter键,或者有没有其他方法可以编写我的代码

相关代码
您可以使用Readby来完成此操作

  • 不稳定的国际单项体育联合会
  • 不使用任何行分隔符
  • 一次只读取1个字符

例如,在此处输入一个空格,然后返回:

$IFS=read-t0.01-s-d'-n1按键;回显“\”$keypress” “a” $IFS=read-t0.01-s-d'-n1按键;回显“\”$keypress” " " $IFS=read-t0.01-s-d'-n1按键;回显“\”$keypress” " " $ 我在上面的示例中添加了
-s
标志,以抑制
读取的回显输入,因此不会混淆输出内容。上述操作不需要这样做

编辑:
直到我看到你的评论,我才意识到你实际上需要非阻塞模式来阅读。这更难。我能想出的最好办法是在read命令中设置一个小的(10毫秒)超时。这会在事件循环中造成10毫秒的延迟,这可能是不可接受的,也可能是不可接受的。对我来说,小得多的超时会导致bash表现不好,而0超时似乎根本不起作用。

我认为问题在于,
read
如果只收到一个换行符,它将不返回任何内容。这就是我所想的,我环顾四周,只能找到[read]作为接收用户输入的一种方式,你知道阅读笔画的其他功能或方法吗?嗨,谢谢你的回答。你会把它放在我贴的代码里的什么地方?如果我把它放在当前读取的循环中,那么它将阻塞,直到我输入一些内容。@Jidder抱歉,我没有意识到您需要非阻塞读取。我做了一个编辑,可能对你有用,也可能没用。
tput smcup
Draw
if [ -t 0 ]; then stty -icanon time 0 min 0; fi
count=0
keypress=''
while [ "$keypress" != "q" ]; do
        sleep 0.1
        (( count = count + 1 ))
        rows=$(tput lines)
        columns=$(tput cols)
        Draw
        read  keypress
        name=$name$keypress
        echo $name
        if [[ $oldcolumns != $columns || $oldrows != $rows ]];then
                Draw
                oldcolumns=$columns
                oldrows=$rows
        elif [[ $count -eq 1  ]]; then
#               Draw
                count=0
        fi
done

if [ -t 0 ]; then stty sane; fi
tput rmcup
#rm tail.tmp
echo "Thanks for using this script."
exit 0
IFS= read -t 0.01 -d '' -n1 keypress
$ IFS= read -t 0.01 -s -d '' -n1 keypress ; echo "\"$keypress\"" "a" $ IFS= read -t 0.01 -s -d '' -n1 keypress ; echo "\"$keypress\"" " " $ IFS= read -t 0.01 -s -d '' -n1 keypress ; echo "\"$keypress\"" " " $