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