使用bash脚本生成移动文件时出现分段错误

时间:2013-12-12 18:05:59

标签: linux bash shell segmentation-fault ns2

我正在使用bash脚本在ns2中为各种种子生成移动文件(setdest)。但我遇到了这个麻烦的分段错误。任何帮助,将不胜感激。 setdest.cc已被修改,因此它不是标准的ns2文件。

我将引导您解决问题。

shell脚本中的此代码返回分段错误。

#! /bin/sh
setdest="/root/ns-allinone-2.1b9a/ns-2.1b9a/indep-utils/cmu-scen-gen/setdest/setdest_mesh_seed_mod"
let nn="70" #Number of nodes in the simulation
let time="900"  #Simulation time
let x="1000"    #Horizontal dimensions
let y="1000"    #Vertical dimensions


for speed in 5
do
for pause in 10 
do
for seed in 1 5
do
echo -e "\n"
echo  Seed = $seed Speed = $speed Pause Time = $pause 
chmod 700 $setdest
setdest -n $nn -p $pause -s $speed -t $time -x $x -y $y -l 1 -m 50 > scen-mesh-n$nn-seed$seed-p$pause-s$speed-t$time-x$x-y$y
done
done
done

错误是

scengen_mesh: line 21: 14144 Segmentation fault      $setdest -n $nn -p $pause -s $speed -t $time -x $x -y $y -l 1 -m 50 >scen-mesh-n$nn-seed$seed-p$pause-s$speed-t$time-x$x-y$y

第21行是shell脚本的最后一行(完成)

奇怪的是如果我在终端上运行相同的setdest命令,没有问题!喜欢 $ setdest -n 70 -p 10 -s 5 -t 900 -x 1000 -y 1000 -l 1 -m 50

我已经确定了问题的确切位置。它与参数-l。如果我删除shell脚本中的参数,则没有问题。现在,我将引导您完成此参数的修改后的setdest.cc。

此修改后的setdest文件使用文本文件initpos来读取无线网状拓扑的静态节点的XY坐标。相关的代码行是

FILE *fp_loc;
int locinit;

fp_loc = fopen("initpos","r");

while ((ch = getopt(argc, argv, "r:m:l:n:p:s:t:x:y:i:o")) != EOF) {       

switch (ch) {
case 'l': 
    locinit = atoi(optarg);
    break;
default:
    usage(argv);
    exit(1);

if(locinit)
    fscanf(fp_loc,"%lf %lf",&position.X, &position.Y);
if (position.X == -1 && position.Y == -1){
        position.X = uniform() * MAXX;
        position.Y = uniform() * MAXY;
    }

我没有得到的是...... 在Shell脚本..    -option -l如果由0提供则不返回错误,     - 但如果由任何其他值(我主要使用1)提供,则返回此分段错误。 在终端..     - 没有任何值的分段错误。 0或1

肯定与shell脚本有关。我很惊讶在哪里出了问题!

我们将非常感谢您的帮助。 干杯

0 个答案:

没有答案