Bash,交互式脚本,使用按键组合在选项之间切换?

时间:2018-06-07 15:37:22

标签: bash

,例如,我希望有一个shell脚本,使用组合键(例如CTRL S,或者可能带有信号)允许我在运行时切换2个或更多选项,如:

  • 每5秒打印一次系统进程数
  • CTRL S
  • 打印当前时间
  • CTRL S
  • 每5秒再次打印系统上的进程数
  • CTRL S
  • 打印当前时间

等...

我使用这个结构,也许有人可以提出另一种更优雅的形式:

while true; do
    echo a
    read -t5 -n1
done
while true; do
    echo b
    read -t5 -n1
done
source ./myscript.sh

1 个答案:

答案 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