我当前的项目在 Linux 机器上运行测试系统(有 9 个活动屏幕)
整个团队都熟悉如何启动测试等,但不太熟悉检查进度、移动文件、强制停止测试等的命令。
我想编写一个脚本,它可以将有用的检查组合在一起,只需按下一个键即可启动它们。我可以用 Perl 轻松完成此操作,但如果它是 shell 脚本 (bash),则更一致。
虽然我的 shell 经验有限,但我想要一个其他人可以轻松扩展的示例脚本(即框架)。
Wait for Key
Perform action
Possibly accept further input for action
Repeat
如果没有收到密钥,则奖励是每 n 分钟运行一次操作。
答案1
根据您的描述,这里有一些简单的事情(感谢 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 分钟内没有执行任何操作时自动调用操作。
答案2
答案3
感谢 David Zaslavsky - 满足了我的要求。
建议的调整(我无法编辑答案)或格式评论
添加外壳类型
#!/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