2014-09-23 124 views
0

是否有可能排队依赖于正在运行的作业输出的作业,以便新作业等待,直到正在运行的作业终止?如何排队作业

假设的例子:你应该已经运行:

./configure && make 

但只跑了:

./configure 

,现在你要告诉做出得到它配置一次(成功)完成,当你去做一些有用的事情就像睡午觉?许多其他耗时的工作也会发生同样的情况。 (基本的作业控制命令 - fg,bg,作业,kill,&,ctrl-Z - 不要这样做,据我所知,问题出现在bash/Ubuntu上,会有兴趣在一般的* nix的解决方案,如果存在的话)

+0

不太明白。在'./configure && make'中,'make'只有在'。/ configure'成功后才能运行。同时,我想你可以去喝一杯咖啡。但如果有错误,肯定无法修复。如果你想判断屏幕输出的下一个任务,我认为最好的选择是脚本。 – HuStmpHrrr 2014-09-23 14:11:39

+0

在'configure'的输出中盲目地输入'make'命令(并按回车键),终端缓冲区将保持它直到tty准备就绪。 – damienfrancois 2014-09-23 14:30:26

回答

5

我认为你在shell提示符下键入这些命令,并且./configure命令仍在运行。当且仅当该./configure命令成功

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

命令[ $? -eq 0 ]会成功。

(你也可以使用[ $? = 0 ],这确实字符串比较,而不是数值比较。)

(如果你愿意假设./configure命令会成功,你可以只输入make

盗窃和更新来自chepner的评论的想法,另一种可能是通过键入按Ctrl-Z暂停的作业,然后把它放到后台(bg),则:

wait %% && make 

wait %%等待“当前”作业,即“上一个作业在前景中停止或在后台开始时停止”。这可以概括为通过用不同的工作规范替换%%来等待任何工作。

如果你确信没有其他后台作业,您可以简化这

wait && make 

wait不带参数等待所有后台作业完成)。

+0

或者,如果它仍在运行,挂起它,用'bg'将它放在后台,然后使用easer-to-type'wait && make'。 – chepner 2014-09-23 14:34:21

+1

@chepner:没有参数的'wait'等待所有后台进程。 'wait %% && make'应该可以工作。 – 2014-09-23 14:51:02

+0

好点,我假设没有其他背景工作。 – chepner 2014-09-23 14:56:19

0

参照前面的过程返回代码与$?

test $? -eq 0 && make 
+0

你尝试过吗?我得到'0:command not found'。看到我的答案。 – 2014-09-23 14:15:44

+0

我使用'test'修复了它! – 2014-09-23 14:23:12

0

我不知道了解您的需求,但我经常使用batch(1)(从Debian上的软件包atd)进行编译,在here document这样:

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

当然它使得只有当你的configure并成功运行,完全

然后在一些终端,我可能遵循tail -f _make.log汇编(提供我在良好的目录)的意义。在编译过程中,您可以享用一杯咖啡或午餐,或者整晚睡个好觉(甚至可以注销)。