0

我是 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
4

1 回答 1

1

正如罗布建议的那样:

* * * * * env DISPLAY=:0.0 /home/x/Documents/MyScripts/Cron/BeepAlarm "Wake Up"

PS:不好意思,没注意手续

于 2012-09-30T16:14:43.063 回答