![在交互式 shell 中每次击键时执行 bash 中的函数](https://linux22.com/image/185067/%E5%9C%A8%E4%BA%A4%E4%BA%92%E5%BC%8F%20shell%20%E4%B8%AD%E6%AF%8F%E6%AC%A1%E5%87%BB%E9%94%AE%E6%97%B6%E6%89%A7%E8%A1%8C%20bash%20%E4%B8%AD%E7%9A%84%E5%87%BD%E6%95%B0.png)
我想在每次用户在交互式 bash shell 中按下按键时运行一个函数。
我想知道 bash 是否有内置的东西,比如 zsh 中的自插入功能?
或者,我想知道是否有一些我可以从中读取的包含缓冲区的文件描述符,类似于 zsh 中的 $BUFFER 变量?
我正在寻找构建类似于script
命令但不使用伪终端的东西
答案1
也许我误解了你,但read -n1
可能有用。
#!/bin/bash
while read -n1 -r v
do
printf 'You typed "%s".\n' "$v"
done
- 允许
-r
反斜杠 (\
) 作为普通字符使用。 - 需要对其进行调整,以便您能够实际看到用户何时键入空格、制表符或Enter。 (正如这里所写的,
read
将返回但$v
不会被设置。) - 特殊键(如F1)将显示为多个字符。
- 像往常一样,这些字符会在用户键入时显示。您可以使用 关闭它
stty -echo
。 - 由于代码写到这里,需要使用Ctrl+C来跳出循环。显然你可以添加自己的逻辑;例如,
if [ "$v" = Q ]; then break; fi
。