我是 linux 新手,我正在学习使用 bash 和 cron 编写闹钟脚本。该脚本在 bash 中运行良好,通过双击它可以正常工作,但不能从 cron 运行;一旦 cron 调用脚本,警报就会响起一次(似乎是一个循环),然后停止,甚至不显示对话框(zenity)。我正在使用 Linux Mint 13 Maya XFCE。
这是我的 crontab 设置
* * * * * /home/x/Documents/MyScripts/Cron/BeepAlarm "Wake Up"
这是我的脚本
!#/bin/bash
# Initialize Variables
Text=$1
Title="Alarm"
OkLabel="Snooze"
CancelLabel='Shut It Up!'
Icon=/home/x/.icons/actions/48/appointment-new.png # Won't work
SnoozeTimeout=120
AlarmCycles=100
shopt expand_aliases
alias vol='amixer -q -c 0 sset Beep'
vol 25% # Heart friendly
rm -f LoopMode # Just in case =P
# Dialog Box Function
_MsgBox () {
if zenity --question --title="$Title" \
--window-icon=$Icon --ok-label="$OkLabel" \
--cancel-label="$CancelLabel" --text="$Text"
then
echo 1 > LoopMode
else
echo 2 > LoopMode
#kill -TERM `jobs -p` # Won't work
fi
}
# Alarm Loop
while [ $AlarmCycles -gt 0 ]; do
case `cat LoopMode` in
"") # Question Box
echo 0 > LoopMode
_MsgBox &
;;
1) # Snooze
vol 25%
rm -f LoopMode
sleep $SnoozeTimeout
;;
2) # Stop Alarm
break # But don't sleep again
;;
*) # Get on my nerves
beep -r 4 -l 20 -f 2000; sleep 0.5
beep -r 4 -l 20 -f 4000; sleep 0.5
AlarmCycles=$((AlarmCycles-1))
vol 5%+
esac
done
# Housekeeping~
kill $(($!+2)) # I don't know a better way to kill zenity Dialog
vol 25% # =)
rm -f LoopMode