我尝试从Bash脚本中逐字中的任何读取用户输入键,然后将其转储为十六进制。那就是:
read input
printf "%b" "$input" | xxd -p
如果用户按2键 a BACKSPACE ,我希望输出为617f
,而不是空。
我怎样才能做到这一点?
答案 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 之外,这应打印每个按键。