1

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

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

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

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

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

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

3 ответа3

6

Исходя из того, что вы описываете, вот что-то простое (благодаря комментариям Денниса):

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 минут.

1

Единственные два, о которых я когда-либо слышал, это Bashinator и NRG Framework

NRG

Bashinator

1

Спасибо Давиду Заславскому - делает то, что я хочу.

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

Добавить тип оболочки

#!/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 

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .