强制用户以逐字模式输入?

时间:2016-02-11 13:39:42

标签: bash user-input

我尝试从Bash脚本中逐字中的任何读取用户输入键,然后将其转储为十六进制。那就是:

read input
printf "%b" "$input" | xxd -p

如果用户按2键 a BACKSPACE ,我希望输出为617f,而不是空。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:3)

这应该有效

#!/bin/bash

while true;do
    stty_state=$(stty -g) 
    #Save stty to reset to default
    stty raw isig -echo 
    #Set to raw and isig so nothing is interpretted and turn echo off so nothing is printed to screen.
    keypress=$(dd count=1 2>/dev/null)
    #Capture one character at a time
    #Redirect "errors" (from dd) output to dump
    keycode=$(printf "%s" "$keypress" | xxd -p)
    # Convert to hex
    stty "$stty_state"
    #Revert stty back
    printf "%s" "$keycode"
    #Print your key in hex
done

你可以在循环上放一个条件来退出循环/程序,否则你需要使用 CTRL C `退出。

除了 CTRL C CTRL z 之外,这应打印每个按键。