我正在寻找一种方法来在用户按下功能键时捕获变量中功能键的值。我尝试使用dd
命令,但只有字母或数字键被捕获:dd 命令不起作用,为什么功能键不起作用。
下面是我尝试过的几行测试,但是变量总是使用功能键返回任何内容:
selection=`dd if=/dev/tty bs=2 count=2 2>/dev/null`
selection=$(dd bs=2 count=2 2>/dev/null)
selection=`dd bs=1 count=1 2>/dev/null`
selection=$(dd bs=1 count=1 2>/dev/null)
selection=`head -c1`
selection=$(head -c1)
例如
当我按下 F3 键时,值
^[[13~
出现在屏幕上,但是执行时echo selection=$selection
,我的变量“selection”保持为空(selection=)当我按下 d 键时,值 d 出现在屏幕上,并且当执行 echo choice=$selection 时,我的变量“selection”等于 (selection=d)
为什么它不能与功能键(F3......)一起使用?
答案1
你可以这样做:
读取按键代码
按下Ctrl+v然后按下一个键。F1例如
并读取输出。F1给出^[OP
注意为此^[
你Escape将在脚本中写入如下内容\e
或者获取功能键的所有代码
for x in {1..24}; do echo -n "F$x "; tput kf$x | cat -A; echo; done
假设F13是Shift+F1
使用 bash 函数处理脚本中的按键,例如while
、read
、case / esac
例子:
#!/bin/bash
ReadKey() {
if read -sN1 KEY; then
while read -sN1 -t 0.001 ; do
KEY+="${REPLY}"
done
fi
}
while ReadKey; do
case "${KEY}" in
$'\eOP') echo 'F1';;
$'\e[24~') echo 'F12';;
*) echo "Keys pressed: ${KEY}";;
esac
done