2012-10-24 3 views
0

, пожалуйста, помогите, как добавить переменные в этот скрипт, знает ли кто-нибудь? Спасибо вам всем.Как отобразить клавишу, нажатую пользователем?

#!/bin/bash 

ARROW_UP=??? # I do not know 
ARROW_DOWN=??? # I do not know 
ARROW_LEFT=??? # I do not know 
ARROW_RIGHT=??? # I do not know 
ARROW_ENTER=??? # I do not know 

case "$KEY" in "$ARROW_UP") echo "press the up arrow key" 
       "$ARROW_DOWN") echo "press the down arrow key";; 
       "$ARROW_LEFT") echo "press the left arrow key" 
       "$ARROW_RIGHT") echo "press the right arrow key" 
       "$ARROW_ENTER") echo "press the enter key" 
esac 

ответ

1

Попробуйте что-то вроде этого (вы можете добавить случай, чтобы выйти из цикла):

#!/bin/bash 

# Reset terminal to current state when we exit. 
trap "stty $(stty -g)" EXIT 

# Disable echo and special characters, set input timeout to 0.2 seconds. 
stty -echo -icanon time 2 || exit $? 

# String containing all keypresses. 
KEYS="" 

# Set field separator to BEL (should not occur in keypresses) 
IFS=$'\a' 

# Input loop. 
while [ 1 ]; do 

    # Read more input from keyboard when necessary. 
    while read -t 0 ; do 
     read -s -r -d "" -N 1 -t 0.2 CHAR && KEYS="$KEYS$CHAR" || break 
    done 

    # If no keys to process, wait 0.05 seconds and retry. 
    if [ -z "$KEYS" ]; then 
     sleep 0.05 
     continue 
    fi 

    # Check the first (next) keypress in the buffer. 
    case "$KEYS" in 
     $'\x1B\x5B\x41'*) # Up 
     KEYS="${KEYS##???}" 
     echo "Up" 
     ;; 
     $'\x1B\x5B\x42'*) # Down 
     KEYS="${KEYS##???}" 
     echo "Down" 
     ;; 
     $'\x1B\x5B\x44'*) # Left 
     KEYS="${KEYS##???}" 
     echo "Left" 
     ;; 
     $'\x1B\x5B\x43'*) # Right 
     KEYS="${KEYS##???}" 
     echo "Right" 
     ;;   
    esac 
done 

Подробнее here.

+0

Я не работаю :-( дисплей только корень @ почта: ~ # /test.sh ^ [[A^[[D^[[B^[[C^[[D^[[B^[[C вы идете? – Charlie

+0

Я забыл код. Проверьте мой обновленный ответ и, пожалуйста, прочитайте ссылку в конце, чтобы понять, что происходит. –

+0

Большое спасибо ... – Charlie

2

Короткий ответ: вы не можете. Используйте настоящий язык программирования.

Некоторые чрезмерно сложные решения можно найти here, но я не одобряю их. Решение ловушки KEYBD в нижней части той же страницы хорошо, но требует ksh93.

Смежные вопросы