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}
}

관련 정보