如何排队作业
是否有可能排队依赖于正在运行的作业输出的作业,以便新作业等待,直到正在运行的作业终止?如何排队作业
假设的例子:你应该已经运行:
./configure && make
但只跑了:
./configure
,现在你要告诉做出得到它配置一次(成功)完成,当你去做一些有用的事情就像睡午觉?许多其他耗时的工作也会发生同样的情况。 (基本的作业控制命令 - fg,bg,作业,kill,&,ctrl-Z - 不要这样做,据我所知,问题出现在bash/Ubuntu上,会有兴趣在一般的* nix的解决方案,如果存在的话)
我认为你在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
不带参数等待所有后台作业完成)。
参照前面的过程返回代码与$?
:
test $? -eq 0 && make
你尝试过吗?我得到'0:command not found'。看到我的答案。 – 2014-09-23 14:15:44
我使用'test'修复了它! – 2014-09-23 14:23:12
我不知道了解您的需求,但我经常使用batch(1)(从Debian上的软件包atd
)进行编译,在here document这样:
batch << EOJ
make > _make.log 2>&1
EOJ
当然它使得只有当你的configure
并成功运行,完全
然后在一些终端,我可能遵循tail -f _make.log
汇编(提供我在良好的目录)的意义。在编译过程中,您可以享用一杯咖啡或午餐,或者整晚睡个好觉(甚至可以注销)。
不太明白。在'./configure && make'中,'make'只有在'。/ configure'成功后才能运行。同时,我想你可以去喝一杯咖啡。但如果有错误,肯定无法修复。如果你想判断屏幕输出的下一个任务,我认为最好的选择是脚本。 – HuStmpHrrr 2014-09-23 14:11:39
在'configure'的输出中盲目地输入'make'命令(并按回车键),终端缓冲区将保持它直到tty准备就绪。 – damienfrancois 2014-09-23 14:30:26