kshにgetch()と同等の機能がありますか?

kshにgetch()と同等の機能がありますか?

私はKorn Shellでスクリプトを書いていますが、ステートメントの1つに対して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}
}

関連情報