,例如,我希望有一个shell脚本,使用组合键(例如CTRL S,或者可能带有信号)允许我在运行时切换2个或更多选项,如:
等...
我使用这个结构,也许有人可以提出另一种更优雅的形式:
while true; do
echo a
read -t5 -n1
done
while true; do
echo b
read -t5 -n1
done
source ./myscript.sh
答案 0 :(得分:2)
这并不是完全你要求的:它每隔5秒吐出一个进程数,并随时响应 Ctrl T 发出当前时间。
#!/usr/bin/expect
puts "hit ctrl+T for the current time"
spawn -noecho sh -c {while :; do ps a | wc -l; sleep 5; done}
interact \024 {puts [timestamp -format "%Y-%m-%d %H:%M:%S"]}
我选择了Ctrl + T以避免与暂停终端的Ctrl + S发生冲突。
响应 Ctrl C
的命令切换器#!/bin/bash
trap switch_command INT
switch_command() {
(( idx = (idx + 1) % ${#commands[@]} ))
echo "switch to: ${commands[idx]}"
}
commands=(count_procs show_time)
idx=0
count_procs() { ps a | wc -l; }
show_time() { date; }
echo "Ctrl+C to switch commands"
echo "'kill $$' to stop"
while :; do
"${commands[idx]}"
sleep 5
done