当我at
使用Arch Linux它没有得到执行当时间到了,但它确实得到了从队列中删除。
这是我安排任务的一个例子。
at now + 2 min
warning: commands will be executed using /bin/sh
at Thu Jul 2 15:34:00 2020
at> code
at> google-chrome-stable
at> <EOT>
job 16 at Thu Jul 2 15:34:00 2020
我只想用该at
命令打开几个应用程序。
code
是打开 Visual Studio Code 的命令。
google-chrome-stable
打开 Google Chrome
请帮忙!!
答案1
我不使用 Arch,因此无法在 Arch 中轻松测试;但at
在我的 Kubuntu 中没有保留 的值DISPLAY
。您要运行的命令需要显示窗口,对吗?
在我的测试中,尝试仅安排kate
(GUI 文本编辑器)失败。我需要指定DISPLAY
:
at> DISPLAY=:0 kate
at> <EOT>
然后它就起作用了。
使用正确的值(echo "$DISPLAY"
运行前调用at
可能会有帮助)。请注意,这是 X Window System 的解决方案。我不熟悉 Wayland。
如果您需要运行多个命令,请记住所有输入都会at
为创建一个脚本。像在脚本中一样sh
创建第一行,以便变量影响后面的所有行。示例:export DISPLAY=:0
at> export DISPLAY=:0
at> code
at> google-chrome-stable
at> <EOT>
以下 shell 函数将export DISPLAY=…
行注入到通过管道传输到实际的代码中at
。它从当前 shell 中存在的变量中获取值,因此它at
的工作方式就像保留了值一样DISPLAY
。
at () { { printf 'export DISPLAY="%s"\n' "$DISPLAY"; cat; } | command at "$@"; }
at
就像问题不存在时一样使用它。问题主体中的代码现在应该可以工作了。