2016-02-20 92 views
1

有沒有辦法在bash中按給定時間間隔重新執行命令? 我希望天氣每30分鐘重新執行一次。 這裏就是比如我的腳本:在bash中按給定時間間隔重新執行命令

#!/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[^>]*>&deg;\(.\).*#\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 
+3

爲什麼不使用'cron'或'at'? –

+0

克朗將重新執行整個腳本?我想只在腳本中重新執行「天氣」。什麼是? –

+0

@LuisVito請準確顯示你想要每30分鐘執行一次。你是否試圖每30分鐘執行一次while循環,因爲目前在echo語句中的子shell'$()'中的每個函數調用都是每秒執行一次。請使用僞代碼澄清。 – jkdba

回答

1

我建議你使用的cron定期運行的腳本。

如果你只想從你的腳本運行特定的功能(例如weather()),添加一個switch語句到腳本中,如果提供了一定的選擇,你會進行檢查,例如-w用於執行weather()功能。

當編輯的crontab每30分鐘(即0,30 * * * * my_script)運行,提供-w到腳本,以執行weather()只 - 0,30 * * * * my_script -w

+0

非常感謝。我會試試這個。 –

+0

@LuisVito不客氣:-)請讓我們知道它是否適合你! –