我有多个八度脚本,我需要按顺序执行。第二个脚本依赖于第一个脚本,因此必须等待第一个脚本完成。我还想从命令行传入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 :(得分: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
答案 1 :(得分: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"
也可能没有必要使用分号。