如果按下某个键则退出循环

如果按下某个键则退出循环

如果按下任意键,我想退出脚本。

#!/bin/sh
while true; do
   df -h | head
   sleep 10
   clear
done

有什么建议吗?

答案1

你最好使用watch命令:

watch -n10 'df -h | head'

使用Ctrl+c停止该命令。

手册watch页上写道:

watch-定期执行程序,全屏显示输出

答案2

sleep 10;用。。。来代替read -t 10 -n 1 exitwhile; if [ -n "$exitwhile" ]; then break; fi

read -t 10 -n 1 exitwhile等待 10 秒输入而无需通过 Enter 确认,然后将输入放入变量 exitwhile。如果该变量不为空,while 循环将中断。

…必须进行修改,因为它只会在字符键上中断

答案3

几乎任何键都可以退出:

#!/bin/bash
while true; do
   { clear; df -h | head; } </dev/null
   read -n 1 -t 10 && break
done; read -t 0.1 -n 1000000

笔记:

  • 事情发生的原因bash不是sh因为read -n
  • 重定向是/dev/null为了防止其他命令read耗尽 stdin(clear可能df不会这样做,但一般命令可能会)。这样,任何输入read最终都会转到。
  • 最后一种方法read是丢弃来自 stdin 的多余字符。某些键会生成多个字符(研究“转义序列”);在df运行时(或您希望使用的任何其他命令)也可以按下多个键。如果没有最后一种方法,read这些多余的字符会弄乱您的命令行。

替代方法,使用watch

#!/bin/bash
watch -n 10 df -h &   # put to the background
read -n 1
kill $!               # kill the the job most recently placed into the background
read -t 0.1 -n 1000000

相关内容