Платформа для интерактивного сценария оболочки (удар)

Мой текущий проект выполняет тестовую систему на поле Linux (с 9 активными экранами)

Целые команды знакомы с тем, как начать тест &c. но менее знакомый с командами для проверки прогресса, перемещая файлы, насильственно останавливая тест и т.д.

Я хотел бы записать сценарий, который может сплотить полезные проверки, ударив их простым нажатием клавиши. Я мог сделать это в Perl очень легко, но более последовательный, если бы это был сценарий оболочки (удар).

Мой опыт оболочки ограничен, хотя и я хотел бы демонстрационный сценарий (т.е. платформа), который будет легок для других расшириться.

Wait for Key
Perform action
  Possibly accept further input for action
Repeat

Премия должна была бы выполнить действие каждый n минуты, если бы никакой ключ не получил.

1
задан 09.07.2010, 12:17

3 ответа

На основе того, что Вы описываете, вот что-то простое (благодаря комментариям Dennis):

while true; do
    # 300 is the time interval in seconds
    if read -n 1 -t 300; then
        case $REPLY in
        a)
            # command(s) to be run if the 'a' key is pressed
            echo a;;
        b)
            # command(s) to be run if the 'b' key is pressed
            echo b;;
        esac
    else
        # command(s) to be run if nothing is pressed after a certain time interval
        echo
    fi
done

Вот альтернатива, которую я имел прежде, хотя я не могу помнить, почему я отклонил case во-первых:

# define functions here
a_pressed() {
    # command(s) to be run if the 'a' key is pressed
}

b_pressed() {
    # commands for if 'b' is pressed
}

# etc.

nothing_pressed() {
    # command(s) to be run if nothing is pressed after a certain time interval
}

while true; do
    # 300 is the time interval in seconds
    if read -n 1 -t 300; then
        fn_name="${REPLY}_pressed"
        declare -pF | grep -q "$fn_name" && ${fn_name}
    else
        nothing_pressed
    fi
done

Так или иначе это обработает нажатия клавиш и автоматически вызовет действие любое время, ничто не делалось в течение 5 минут.

6
ответ дан 12.12.2019, 07:54

Только двумя, о которых я когда-либо слышал, является Bashinator и Платформа NRG

NRG

Bashinator

1
ответ дан 12.12.2019, 07:54

Благодаря David Zaslavsky - делает то, что я хочу.

Предложенные тонкие настройки (я не могу отредактировать ответ), или комментарии формата

Добавьте тип Shell

#!/bin/bash 

Параметризуйте время и допускайте подсказку (но не на тайм-ауте). Также появляется, что-N должен был быть-n

# Will wait for this interval, then run default action 
DELAY=30 
while true; do 
    echo "Command list here..." 
    while true; do 
        if read -n 1 -t ${DELAY}; then 
            fn_name="${REPLY}_pressed" 
            declare -pF | grep -q "$fn_name" && ${fn_name} 
            break 
        else 
            default_action 
        fi 
    done 
done 
1
ответ дан 12.12.2019, 07:54

Теги

Похожие вопросы