【发布时间】:2016-06-02 04:11:19
【问题描述】:
有没有办法在 bash 中按给定的时间间隔重新执行命令? 我希望每 30 分钟重新执行一次天气。 这是我的脚本示例:
#!/bin/bash
#Show time, date and clickable calendar
clock() {
curtime=`date '+%I:%M'`
curdate=`date '+%d-%m-%Y'`
echo "%{A:/usr/bin/gsimplecal:}%{T2} %{T1}$curdate%{A} %{T2} %{T1}$curtime"
}
volume1() {
amixer get Master | sed -n 'N;s/^.*\[\([0-9]\+%\).*$/\1/p'
}
#weather
weather(){
curl -s "$(curl -s 'http://www.wunderground.com/' | sed -n '/Full Forecast/{s#[^"]*"\([^"]*\)".*#http://www.wunderground.com\1#p}')" | sed -n '/"curCond"/{ s#.*wx-value[^>]*>\([^<]*\)<.*#\1#; h }; /"curTemp"/{ N; N; N; s#.*wx-value[^>]*>\([^<]*\)<.*wx-unit[^>]*>°\(.\).*#\1°\2 #; G; s#\n##; p }'
echo $weather
}
while :; do
echo "%{B#DDecf0f1}%{F#2c2c2c}%{T2}%{l} $(groups) %{T1}$(curwin) %{r}%{F#2C2C2C} $(weather) $(space)|$(space) VOL: $(volume1) $(space)|$(space) $(uptime) $(space)|$(space) $(clock) %{A2}$(curwin)"
sleep 1 #sleep of mainloop
done
【问题讨论】:
-
为什么不使用
cron或at? -
Cron 会重新执行整个脚本吗?我只想在我的脚本中重新执行“天气”。在什么地方?
-
@LuisVito 请准确显示您希望每 30 分钟执行一次的内容。您是否尝试每 30 分钟执行一次 while 循环,因为目前在您的 echo 语句中的子 shell
$()中的每个函数调用每秒都会执行一次。即使使用伪代码也请澄清。 -
我想每 30 分钟重新执行一次“天气”功能,让其他一切保持原样。
-
@LuisVito 最简单的,只需通过 cron 每 30 分钟将天气保存到一个文件,一些后台进程,等等......然后从脚本中的文件中读取。或者只是节省时间,检查是否已过 30 分钟,是否显示新天气和更新时间。
标签: linux bash counter increment