Casing arrow keys in bash

前端 未结 8 878
遥遥无期
遥遥无期 2020-12-10 06:45

Is it possible to case arrow keys in a bash script to run a certain set of commands if the up/left arrow keys are pressed, and a certain set if the down/right arrow keys are

8条回答
  •  没有蜡笔的小新
    2020-12-10 07:13

    To extend JellicleCat's answer:

    #!/bin/bash
    escape_char=$(printf "\u1b")
    read -rsn1 mode # get 1 character
    if [[ $mode == $escape_char ]]; then
        read -rsn4 -t 0.001 mode # read 2 more chars
    fi
    case $mode in
        '') echo escape ;;
        '[a') echo UP ;;
        '[b') echo DOWN ;;
        '[d') echo LEFT ;;
        '[c') echo RIGHT ;;
        '[A') echo up ;;
        '[B') echo down ;;
        '[D') echo left ;;
        '[C') echo right ;;
        '[2~') echo insert ;;
        '[7~') echo home ;;
        '[7$') echo HOME ;;
        '[8~') echo end ;;
        '[8$') echo END ;;
        '[3~') echo delete ;;
        '[3$') echo DELETE ;;
        '[11~') echo F1 ;;
        '[12~') echo F2 ;;
        '[13~') echo F3 ;;
        '[14~') echo F4 ;;
        '[15~') echo F5 ;;
        '[16~') echo Fx ;;
        '[17~') echo F6 ;;
        '[18~') echo F7 ;;
        '[19~') echo F8 ;;
        '[20~') echo F9 ;;
        '[21~') echo F10 ;;
        '[22~') echo Fy ;;
        '[23~') echo F11 ;;
        '[24~') echo F12 ;;
        '') echo backspace ;;
        *) echo $mode;;
    esac
    

提交回复
热议问题