我正在尝试制作一个脚本,该脚本在带有busybox灰的非常有限的系统上处理箭头键,而其他很少。举例来说,不要太笨拙。我有一些可以正常工作的东西,但偶尔会在屏幕上显示一些ANSI转义序列。这似乎最经常发生在自动重复键启动时,而且在读取下一个键之前必须完成更复杂的处理时。在笔记本电脑上,这比目标系统快得多,这在大多数情况下都是不错的选择,但是如果我按住箭头键,偶尔会出现类似^ [[B的箭头。它如何通过无声阅读?
我没有明确处理HOME和END,因此^ [OH和^ [OF通过率更高。这使我认为可能是在超时期间它们正在泄漏,但是我真的不知道。
无论如何,管道或子外壳是否有一些可能包含转义符的技巧?
E=$(printf "\033")
NL='
'
# Works in bash, ash without stty but takes a sec for ESC key (not ESC sequence)
# But even with nothing but q key checks in the loop it still occasionally
# spams the screen with ^[[B etc if I hold arrow keys down for auto-repeat.
while true; do
IFSBAK=$IFS ; IFS=
read -rsn1 _KEY
case "${_KEY}" in
"${E}") _K=""; read -sn2 -t1 _K; _KEY="${E}${_K}";
case "${_K}" in
"[A"|"[B"|"[C"|"[D"|"") ;;
"OP"|"OQ"|"OR"|"OS") ;;
*) _K=""; read -n1 -t1 _K; _KEY="${_KEY}${_K}" ;;
esac
;; "") _KEY="NL"
;;
esac
IFS=$IFSBAK ; IFSBAK=
case "$_KEY" in
"${E}" | q )
break;;
esac
done
答案 0 :(得分:0)
问题是
它如何通过无声阅读?
这是因为脚本正在将终端切换为静音(无回声)读取所使用的模式,并且当 not 时,shell会回显您的键。 期待输入。您可以通过在脚本运行时使用stty禁用回显(并在退出时恢复回显)来改善此问题。