Existe algo equivalente a getch () em ksh?

6

Estou escrevendo um script no Korn Shell, onde em uma declaração quero algo como getch() usado em C.

Eu quero que meu loop while seja encerrado, se vir que eu pressionei ESC no teclado.

Por exemplo,

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

No meu script, este getch() != 27 não funciona. Eu quero que algo lá seja trabalhado. Alguém pode ajudar?

    
por PriB 08.02.2015 / 17:11

2 respostas

7

Use read

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

read -n 1 é para ler 1 caractere.

Isso deve funcionar em bash , mas você pode verificar se funciona em ksh

    
por 08.02.2015 / 17:21
1
#!/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}
}
    
por 15.11.2015 / 12:58