Мой текущий проект выполняет тестовую систему на поле Linux (с 9 активными экранами)
Целые команды знакомы с тем, как начать тест &c. но менее знакомый с командами для проверки прогресса, перемещая файлы, насильственно останавливая тест и т.д.
Я хотел бы записать сценарий, который может сплотить полезные проверки, ударив их простым нажатием клавиши. Я мог сделать это в Perl очень легко, но более последовательный, если бы это был сценарий оболочки (удар).
Мой опыт оболочки ограничен, хотя и я хотел бы демонстрационный сценарий (т.е. платформа), который будет легок для других расшириться.
Wait for Key
Perform action
Possibly accept further input for action
Repeat
Премия должна была бы выполнить действие каждый n минуты, если бы никакой ключ не получил.
На основе того, что Вы описываете, вот что-то простое (благодаря комментариям 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 минут.
Благодаря 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