В скрипте bash, как я могу привязать ключ к функции? - PullRequest
3 голосов
/ 04 сентября 2011

Я сделал следующее:

#! /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 Ответ

6 голосов
/ 05 сентября 2011

Привязки клавиш с использованием bind влияют только на интерактивный ввод текста (библиотека readline ). При запуске программы (даже встроенной while) терминал переключается в стандартный «приготовленный» режим и вводится в текущую запущенную программу (в этом случае sleep получит вход).

Вы можете прочитать ключи вручную:

read -N 1 input

echo "Read '$input'"

Однако, если вы хотите запустить цикл чтения while и одновременно, вам придется делать это в отдельных процессах (bash не поддерживает потоки). Поскольку переменные являются локальными для процесса, конечный результат должен быть довольно сложным.

...