At 命令实际上并未运行

At 命令实际上并未运行

我用来设置 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):

描述

atbatch从标准输入或指定文件中读取稍后要执行的命令,使用/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/shdash在您的情况下),请参阅shellcheck.net对此寻求一些帮助。

相关内容