我做了以下事情:
#! /bin/bash
a=2
function up_a() {
a=$((a+1));
}
while (true);
do
echo "a=$a";
up_a;
sleep 1;
done
工作正常:
$ ./test.sh
a=2
a=3
...
现在,我尝试以下方法:
#! /bin/bash
a=2
function up_a() {
a=$((a+1));
}
bind -x '"p": up_a';
while (true);
do
echo "a=$a";
sleep 1;
done
当我测试时:
$ . test.sh
(我需要“导入”脚本以使用bind
命令,source
或.
)
a=2
a=2
...
(我多次按下“p”键)
怎么了?
答案 0 :(得分:6)
使用bind
的键绑定仅影响交互式文本输入( readline 库)。当运行程序(甚至内置while
)时,终端切换到标准的“熟”模式并输入当前正在运行的程序(在这种情况下,sleep
将接收输入)
您可以手动阅读密钥:
read -N 1 input
echo "Read '$input'"
但是,如果要同时运行while
循环和读取输入,则必须在单独的进程中执行此操作(bash不支持线程)。由于变量是流程的本地变量,因此最终结果必须相当复杂。