如何排队工作

时间:2014-09-23 14:08:34

标签: linux bash

是否可以排队依赖于正在运行的作业输出的作业,因此新作业会一直等到正在运行的作业终止?

假设示例:您应该运行:

./configure && make

但你只跑了:

./configure

现在你想告诉make一旦配置(成功)完成就继续使用它,而你去做一些有用的事情,比如小睡一会儿?许多其他耗时的工作也会出现同样的情况。

(基本的作业控制命令--fg,bg,jobs,kill,&,ctrl-Z - 据我所知不这样做。问题出现在bash / Ubuntu上,但我' d如果存在,则对一般的* nix解决方案感兴趣。)

3 个答案:

答案 0 :(得分:5)

我假设您在shell提示符下键入这些命令,并且./configure命令仍在运行。

./configure
# oops, forgot type type "make"
[ $? -eq 0 ] && make

当且仅当[ $? -eq 0 ]命令成功时,命令./configure才会成功。

(您也可以使用[ $? = 0 ],它进行字符串比较而不是数字比较。)

(如果您愿意假设./configure命令成功,您只需输入make。)

从chepner的评论中窃取并更新一个想法,另一种可能性是通过键入 Ctrl-Z 暂停作业,然后将其置于后台(bg),然后:

wait %% && make

wait %%等待"当前"工作,这是"最后一份工作在前台停工或在后台启动时停止工作"。通过将%%替换为不同的作业规范,这可以推广到等待任何作业。

您可以将此简化为

wait && make

如果您确定没有其他后台作业(wait没有参数等待所有后台作业完成)。

答案 1 :(得分:0)

使用$?参考上一个流程返回代码:

test $? -eq 0 && make

答案 2 :(得分:0)

我不确定您是否了解自己的需求,但我经常使用batch(1)(来自Debian上的atd包)以here document这样编译:

batch << EOJ
  make > _make.log 2>&1
EOJ

当然,只有你的configure成功且完全成功才有意义

然后在某个终端,我可能会跟着tail -f _make.log进行编译(前提是我在好的目录中)。在编辑过程中,您可以获得咖啡 - 或者午餐,或者整晚睡觉 - (甚至退出)。