![“at”命令可以执行任何类型的 shell 脚本吗?](https://linux22.com/image/98678/%E2%80%9Cat%E2%80%9D%E5%91%BD%E4%BB%A4%E5%8F%AF%E4%BB%A5%E6%89%A7%E8%A1%8C%E4%BB%BB%E4%BD%95%E7%B1%BB%E5%9E%8B%E7%9A%84%20shell%20%E8%84%9A%E6%9C%AC%E5%90%97%EF%BC%9F.png)
我创建了一个显示消息对话框的 java 程序。按确定后关闭,程序执行结束。
然后我创建了一个alarm.sh
执行该程序的 shell 脚本。我测试了它并且它有效:
$ alarm.sh "-i It's time to ring up the revenue service"
但是当我执行时:
$ echo "alarm.sh \"-i It's time to ring up the revenue service\"" | at 15:00
尽管已安排作业,但消息对话框在 15:00 并未弹出。为什么? “at”如何执行shell脚本以及它有什么限制?
答案1
不可以,at
只能运行非交互式脚本。
这些脚本将在不附加到启动at
命令的终端的情况下运行。如果程序在其stdout
和/或stderr
流程中输出某些内容,则该输出将通过邮件发送给您。
启动脚本时,某些变量不会保留,特别是DISPLAY
,这就是您尝试失败的原因。您可以查看您的邮件,看看是否报告了错误。如果没有,sendmail
或者类似的可能没有安装/配置。
如果你想在命令运行时使用当前的 X11 显示,你可以这样设置:
echo "DISPLAY=$DISPLAY alarm.sh \"-i It's time to ring up the revenue service\"" | at 15:00
答案2
at
可能没有您当前的工作目录它是工作目录。指定完整路径alarm.sh
:
echo "/path/to/alarm.sh '-i There is no alarm; only Zuul'" | at 15:00