是否可以排队依赖于正在运行的作业输出的作业,因此新作业会一直等到正在运行的作业终止?
假设示例:您应该运行:
./configure && make
但你只跑了:
./configure
现在你想告诉make一旦配置(成功)完成就继续使用它,而你去做一些有用的事情,比如小睡一会儿?许多其他耗时的工作也会出现同样的情况。
(基本的作业控制命令--fg,bg,jobs,kill,&,ctrl-Z - 据我所知不这样做。问题出现在bash / Ubuntu上,但我' d如果存在,则对一般的* nix解决方案感兴趣。)
答案 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
进行编译(前提是我在好的目录中)。在编辑过程中,您可以获得咖啡 - 或者午餐,或者整晚睡觉 - (甚至退出)。