目标:在一段时间后能够在终端中打开“信息框”;闹钟风格,(在 Debian 派生的 Linux 盒子上)。然而:
> at now + 3 min
dialog --infobox "Time to attend to matters\!" 6 33
不产生输出。以及一封系统电子邮件,显示“打开终端时出错:未知”。因此,我们在对话框中添加一些环境变量的前缀,这在过去起到了作用,“at”之后的命令现在看起来像这样:
TERM=linux DISPLAY=":0.0" dialog --infobox "Seek ye the truth\!" 6 33
现在唯一生成的是一封充满转义序列的系统电子邮件,我猜这是对话框本身的输出?如何让对话能够很好地使用“at”? (谢谢!)
答案1
at
和cron
是用于在无人值守的情况下运行命令的工具。当用户会话不存在或用户在不同终端登录时,可以运行计划的命令,以便atd
守护程序读取命令的标准输出并将其通过电子邮件发送给用户。当用户想做其他事情时,他必须重定向标准输出。但是重定向到用户终端相当棘手,因为命令必须以某种方式确定终端。
如果您想在延迟后显示某些内容,请尝试类似的操作
(sleep 10 && /bin/echo "game over") &
答案2
使用的命令dialog
不起作用,因为没有与该at
进程关联的终端 (tty)。像 一样cron
,at
旨在成为一个非交互式环境。由于没有可以dialog
交互的终端,因此设置TERM
没有帮助。
如果您碰巧已登录(并且正在运行 X),那么您能让dialog
出现在一个单独的终端中。例如:
at now -f foo
哪里foo
有
xterm -display :0 -e dialog --msgbox "Seek ye the truth!" 6 33 &
工作得足够好:
但添加了一些更改:
- 一个信息框会在屏幕上闪烁并很快消失。用一个消息框反而
- 不要在 at/batch 作业中等待它完成:使用“&”
如果您需要 的响应dialog
,您应该记住,它通常将文本接口写入标准输出,并将响应写入标准错误。您可以使用该--stdout
选项来反转(使脚本更简单)。 (zenity 不支持此选项,因此您可能需要通过脚本解决方法来适应此选项)。
进一步阅读: