我有一些任务在待处理的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
?
答案1
这和你的问题非常相似”在指定日期从队列中删除作业”,不同之处在于您现在要删除所有作业。
去除全部at
队列中待处理的作业,使用
atrm -a
-a
在不是有效选项的系统上atrm
,使用
atq | awk '{ print $1 }' | xargs atrm
awk
管道中间的小脚本at
将从 的输出中打印第一列(作业 ID)atq
,并将以这些作为参数xargs
运行。atrm
这几乎与我对你另一个问题的回答print $1
除了无条件执行这一事实之外。
之所以
atq | awk '{ print $1 }' | atrm
不起作用的原因是atrm
没有从标准输入中读取作业 ID。它需要命令行上的 ID。
您的“修复”是使用两个嵌套命令替换:
atrm $( echo "$( atq | awk '{ print $1 }' )" )
这可以减少为仅使用单个命令替换(echo $(...)
在本例中,与在替换中运行命令相同,没有echo
),
atrm $( atq | awk '{ print $1 }' )