Voglio un'opzione simile come getche()
in c. Come posso leggere solo un singolo carattere inserito da linea di comando.come leggere un singolo carattere nello script di shell
Utilizzando il comando read
possiamo farlo?
Voglio un'opzione simile come getche()
in c. Come posso leggere solo un singolo carattere inserito da linea di comando.come leggere un singolo carattere nello script di shell
Utilizzando il comando read
possiamo farlo?
In ksh si può sostanzialmente fare:
stty raw
REPLY=$(dd bs=1 count=1 2> /dev/null)
stty -raw
In bash, read
può farlo:
read -n1 ans
read -n1
lavori per bash
La modalità stty raw
impedisce ctrl-c da lavorare e puoi farti rimanere bloccato in un loop di input senza via d'uscita. Anche la pagina man dice che stty -raw
non è garantito per riportare il terminale allo stesso stato.
Quindi, la creazione di dtmilano's answer utilizzando stty -icanon -echo
evita tali problemi.
#/bin/ksh
## /bin/{ksh,sh,zsh,...}
# read_char var
read_char() {
stty -icanon -echo
eval "$1=\$(dd bs=1 count=1 2>/dev/null)"
stty icanon echo
}
read_char char
echo "got $char"
restituisce '0403-010 Un flag specificato non è valido per questo comando. Errore. – footy
@footy, il comando di lettura incorporato di bash ha l'opzione -n. Che shell stai usando? –
@glennjackman ksh shell sto usando – footy