at
我在待处理作业队列中有一些任务,
$ atq
28 Wed Oct 31 10:23:00 2018
27 Tue Oct 30 21:20:00 2018
25 Tue Oct 30 21:19:00 2018
26 Tue Oct 30 21:20:00 2018
20 Tue Oct 30 18:25:00 2018
30 Wed Oct 31 10:59:00 2018
32 Wed Oct 31 21:03:00 2018
23 Tue Oct 30 18:28:00 2018
31 Wed Oct 31 13:58:00 2018
19 Tue Oct 30 15:43:00 2018
21 Tue Oct 30 18:27:00 2018
我想获取工作编号并将其删除
$ atq | awk '{print $1}'
20
30
32
23
31
19
21
但是,它没有按预期工作
$ atq | awk '{print $1}'| atrm ; atq
20 Tue Oct 30 18:25:00 2018
30 Wed Oct 31 10:59:00 2018
32 Wed Oct 31 21:03:00 2018
23 Tue Oct 30 18:28:00 2018
31 Wed Oct 31 13:58:00 2018
19 Tue Oct 30 15:43:00 2018
21 Tue Oct 30 18:27:00 2018
我用命令替换解决了问题
$ atrm $(echo "$(atq | awk '{print $1}')")
为什么管道没有按预期执行atrm
?
这与您的问题“ Remove jobs from at queue on a specified date ”非常相似,不同之处在于您现在要删除所有作业。
要从队列中删除所有待处理的作业,请使用
at
在
-a
不是有效选项的系统上atrm
,使用awk
管道中间的小脚本at
将从 的输出中打印第一列(作业 ID)atq
,并将以这些作为参数xargs
运行。atrm
除了无条件执行之外,这与我对您的其他问题的回答几乎相同。
print $1
之所以
不起作用是因为
atrm
它没有从其标准输入中读取作业 ID。它需要命令行上的 ID。您的“修复”是使用两个嵌套命令替换:
这可以减少到只使用单个命令替换(
echo $(...)
在这种情况下,与在替换中运行命令相同,没有echo
),