我写了一个bash脚本,其中有一个for循环,在这个for循环中我调用了一个对我的笔记本电脑来说很重的matlab脚本。有没有办法等待迭代完成然后启动另一个? 这里有我脚本的一部分:
for f in $FILES
do
echo "Processing file... $f"
cp $f $BASEDIR/$RESULTS/$filename/
echo "generating data for matlab ..."
./../../../matlab/graphic_file_gen $f > data_matlab.txt
if [[ $f == *fsr12* ]]; then
fullPath=$BASEDIR/$RESULTS/$filename/data_matlab.txt
cd /home/myname/Desktop/test/
fsr=12;
/usr/local/MATLAB/R2015a/bin/matlab -nodisplay -nojvm -nodesktop -r "fullPath='$fullPath'; fsr='$fsr' ; fit_exp_real_data" > $BASEDIR/$RESULTS/$filename/result_matlab.txt</dev/null&
cd -
fi
cd $BASEDIR/$DECADIMENTI
done
最后的问题是:有没有办法等待这条线的完成?
/usr/local/MATLAB/R2015a/bin/matlab -nodisplay -nojvm -nodesktop -r "fullPath='$fullPath'; fsr='$fsr' ; fit_exp_real_data" > $BASEDIR/$RESULTS/$filename/result_matlab.txt</dev/null&
在开始下一次迭代之前?
答案 0 :(得分:1)
如果您在启动matlab
脚本和继续下一次迭代之间需要进行其他处理,则可以插入wait
语句暂停,直到matlab
完成:< / p>
/usr/local/MATLAB/R2015a/bin/matlab ... &
# Do more here
wait
cd -
但是,在这里你根本不需要在后台运行脚本,所以只需省略&
:
/usr/local/MATLAB/R2015a/bin/matlab...
# Script pauses while matlab runs. Once it returns, the script continues
cd -
答案 1 :(得分:0)
是的,只需删除尾随&
即可在前台执行命令。
默认情况下,shell命令在前台执行,shell等待它们完成以继续到下一行。但是如果在命令末尾添加&
,它将在后台执行,并且shell会在命令启动后立即继续执行,而不必等待它完成。
答案 2 :(得分:0)
根据Ben Voigt和ÁlvaroGutiérrez的见解,我注意到剧本的一部分似乎是多余的。试试这个修改过的版本:
for f in $FILES
do
echo "Processing file... $f"
cp $f $BASEDIR/$RESULTS/$filename/
echo "generating data for matlab ..."
./../../../matlab/graphic_file_gen $f > data_matlab.txt
if [[ $f == *fsr12* ]]; then
fullPath=$BASEDIR/$RESULTS/$filename/data_matlab.txt
cd /home/myname/Desktop/test/
fsr=12;
/usr/local/MATLAB/R2015a/bin/matlab -nodisplay -nojvm -nodesktop -r "fullPath='$fullPath'; fsr='$fsr' ; fit_exp_real_data" > $BASEDIR/$RESULTS/$filename/result_matlab.txt
cd -
fi
cd $BASEDIR/$DECADIMENTI
done