2014-09-23 125 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彙編(提供我在良好的目錄)的意義。在編譯過程中,您可以享用一杯咖啡或午餐,或者整晚睡個好覺(甚至可以註銷)。