ksh 中是否有与 getch() 等效的东西?

ksh 中是否有与 getch() 等效的东西?

我正在 Korn Shell 中编写一个脚本,其中的一个语句我想要类似于getch()C 中使用的东西。

如果发现我按下了键盘,我希望while退出循环。ESC

例如。

while [[ getch() != 27 ]]
do
    print "Hello"
done

在我的脚本中这getch() != 27是行不通的。我想要在那里做点什么。有人可以帮忙吗?

答案1

使用read

x='';while [[ "$x" != "A" ]]; do read -n1 x; done

read -n 1 是读取1个字符。

这应该可以工作,bash但你可以检查它是否可以工作ksh

答案2

#!/bin/ksh

# KSH function to read one character from standard input
# without requiring a carriage return. To be used in KSH
# script to detect a key press.
#
# Source this getch function into your script by using:
#
# . /path/to/getch.ksh
# or
# source /path/to/getch.ksh
#
# To use the getch command in your script use:
# getch [quiet]
#
# Using getch [quiet] yields no output.

getch()
{
   STAT_GETCH="0"
   stty raw
   TMP_GETCH=`dd bs=1 count=1 2> /dev/null`
   STAT_GETCH="${?}"
   stty -raw

   if [[ "_${1}" != "_quiet" ]]
   then
       print "${TMP_GETCH}"
   fi
   return ${STAT_GETCH}
}

相关内容