“at”(批处理)作业 + 对话框 = 无

“at”(批处理)作业 + 对话框 = 无

目标:在一段时间后能够在终端中打开“信息框”;闹钟风格,(在 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

atcron是用于在无人值守的情况下运行命令的工具。当用户会话不存在或用户在不同终端登录时,可以运行计划的命令,以便atd守护程序读取命令的标准输出并将其通过电子邮件发送给用户。当用户想做其他事情时,他必须重定向标准输出。但是重定向到用户终端相当棘手,因为命令必须以某种方式确定终端。

如果您想在延迟后显示某些内容,请尝试类似的操作

(sleep 10 && /bin/echo "game over") &

答案2

使用的命令dialog不起作用,因为没有与该at进程关联的终端 (tty)。像 一样cronat旨在成为一个非交互式环境。由于没有可以dialog交互的终端,因此设置TERM没有帮助。

如果您碰巧已登录(并且正在运行 X),那么您dialog出现在一个单独的终端中。例如:

at now -f foo

哪里foo

xterm -display :0 -e dialog --msgbox "Seek ye the truth!" 6 33 &

工作得足够好:

从 at-script 运行对话框

但添加了一些更改:

  • 一个信息框会在屏幕上闪烁并很快消失。用一个消息框反而
  • 不要在 at/batch 作业中等待它完成:使用“&”

如果您需要 的响应dialog,您应该记住,它通常将文本接口写入标准输出,并将响应写入标准错误。您可以使用该--stdout选项来反转(使脚本更简单)。 (zenity 不支持此选项,因此您可能需要通过脚本解决方法来适应此选项)。

进一步阅读:

相关内容