2014-07-23 91 views
0

我有多個八度腳本,需要按順序執行。第二個腳本依賴於第一個腳本,所以它必須等待第一個腳本完成。我也想從命令行傳入2個參數。但是,下面的腳本不會在執行第二個腳本之前等待第一個腳本。我該如何解決這個問題?從命令行運行多個八度腳本

EXP_ID = $1;  
NUM_FEATURES = $2; 

cd fisher; 
octave computeFisherScore-AG.m $EXP_ID; 
cd ..; 
octave predictability-AG.m $EXP_ID $NUM_FEATURES; 
+0

你是否分別運行這些腳本? – konsolebox

+1

你爲什麼要編寫一個按順序調用Octave腳本的bash腳本?爲什麼不只是一個可以同時運行的Octave腳本?另外,爲什麼不用「#!」來製作Octave腳本? bin/octave'作爲shebang行,並給它執行權限? – carandraug

+0

我同意@carandraug,不需要單獨運行兩個Octave腳本或依賴Shell腳本。重構您的代碼或創建另一個按順序調用另外兩個Octave腳本。 – juliohm

回答

1

嘗試:

EXP_ID = $1;  
NUM_FEATURES = $2; 

cd fisher; 
octave computeFisherScore-AG.m $EXP_ID; 
wait 
cd ..; 
octave predictability-AG.m $EXP_ID $NUM_FEATURES; 
wait 

退房http://www.lehman.cuny.edu/cgi-bin/man-cgi?wait+3

+0

謝謝!我需要玩弄這個來弄清楚是否解決了它! –

1

也許你的倍頻腳本在後臺運行。您可以使用此解決方法:

waitpid() { 
    while kill -s 0 "$1" >/dev/null 2>&1; do 
     sleep 1 
    done 
} 

cd fisher; 
octave computeFisherScore-AG.m $EXP_ID; 
waitpid "$!" 
cd ..; 
octave predictability-AG.m $EXP_ID $NUM_FEATURES; 

我還建議你報你的論點正確,以防止意外字的拆分和路徑擴展:

cd fisher 
octave computeFisherScore-AG.m "$EXP_ID" 
waitpid "$!" 
cd .. 
octave predictability-AG.m $EXP_ID "$NUM_FEATURES" 

分號也可能沒有必要。

+0

謝謝!我也需要解決這個問題,找出解決辦法!字符串拆分絕對也是一個問題 –

+0

謝謝你的報價建議。這絕對是它的一部分。 –

+0

@Adam_G好的。我仍然很好奇爲什麼你的原始腳本不能用於「八度」。它本身不能在後臺運行。但是'wait'與它一起工作。 – konsolebox