我用来设置 at 命令的代码可以在这里找到
at -f noti.sh -t ${sleepTimes[$i]}
时间正常,因为我可以看到使用 成功列出的职位atq
。
文件 noti.sh 位于使用 at 命令的同一目录中,它包含:
if [[ "$OSTYPE" == "linux-gnu" ]]; then
notify-send "Insomnia" "Time to take a rest" -u critical -t 7000 -i sleep.ico
elif [[ "$OSTYPE" == "darwin"* ]]; then
terminal-notifier -title "Insomnia" -message "Time to take a rest" -sound "default" -group rest -timeout 7 -appIcon sleep.png
fi
终端通知程序和通知发送都安装在我测试过的两个各自的平台上。为什么该函数不会按应有的方式执行(显示通知气泡)?
答案1
您的问题可能是这样的(来自man at
):
描述
at
并batch
从标准输入或指定文件中读取稍后要执行的命令,使用/bin/sh
。
另外,如果您运行,at -f noti.sh -t 2...
它应该输出如下警告:
warning: commands will be executed using /bin/sh
job 4 at Mon May 8 13:51:00 2017
/bin/sh
在 Debian 上是一个符号链接/bin/dash
。我猜你用 测试了你的脚本bash
,其中有一些POSIX 未定义的功能,即它们不能在 中工作dash
,或者一般来说不能与 一起工作/bin/sh
。
在您的具体情况下,问题是[[ ]]
和OSTYPE
,它们不受 的支持dash
。尝试运行
$ sh noti.sh
它将返回以下错误
noti.sh: 2: noti.sh: [[: not found
noti.sh: 4: noti.sh: [[: not found
然而,运行脚本可以满足bash
您的需求。
要按您的预期运行脚本,您可能需要重写它以兼容/bin/sh
(dash
在您的情况下),请参阅shellcheck.net对此寻求一些帮助。