在bash脚本中,如何将键绑定到函数?

时间:2011-09-04 19:15:00

标签: bash key-bindings

我做了以下事情:

#! /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”键)

怎么了?

1 个答案:

答案 0 :(得分:6)

使用bind的键绑定仅影响交互式文本输入( readline 库)。当运行程序(甚至内置while)时,终端切换到标准的“熟”模式并输入当前正在运行的程序(在这种情况下,sleep将接收输入)

您可以手动阅读密钥:

read -N 1 input

echo "Read '$input'"

但是,如果要同时运行while循环读取输入,则必须在单独的进程中执行此操作(bash不支持线程)。由于变量是流程的本地变量,因此最终结果必须相当复杂。