我正在 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}
}