如果按下任意键,我想退出脚本。
#!/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