Bash脚本运行不正常,但在终端中手动运行时,相同的脚本命令正常运行

时间:2018-06-11 15:42:03

标签: bash shell

我有一个用于读取数据和创建图像的bash脚本。我在for循环中为每个文件号(100-150)使用bash脚本来为每个文件编号创建图像。

#!/bin/bash

echo "PATH = $PATH";
echo "SHELL = $SHELL";

directory="../run-folders/Gritschneder_et_al_2009/3D_stirMin\=2_stirMax\=20_solWeight\=0.5/Ionization\ Data/dbl_files"        

Resolution=100

for i in `seq 100 150`;
    do

        echo ./surf $directory $i $Resolution $Resolution $Resolution   
    done    


for j in `seq 100 150`;
    do
            python plotsurfdens.py $directory $j $Resolution 
    done    

rm -rf $directory/*.txt

当我运行脚本时,它会从可执行文件“surf”中生成以下消息,其中我检查了参数的数量是否符合预期: -

if(argc!=6)   //TO check if no of arguments correct
    cout<<"Usage : ./read filedirectory fileno N[X] N[Y] N[Z]"<<endl;

这不应该发生,因为脚本中传递的参数数量为6。此外,当我回应运行“冲浪”的命令并复制打印的命令时,它的工作原理。这意味着当我手动输入我在脚本中作为一行提供的命令时,它可以工作但不在脚本中。为什么会这样?在此先感谢:)

1 个答案:

答案 0 :(得分:1)

展开变量值时不会处理转义。从directory赋值中取出反斜杠,并在使用时引用该变量。

#!/bin/bash

echo "PATH = $PATH";
echo "SHELL = $SHELL";

directory="../run-folders/Gritschneder_et_al_2009/3D_stirMin=2_stirMax=20_solWeight=0.5/Ionization Data/dbl_files"        

Resolution=100

for i in `seq 100 150`;
    do

        echo ./surf "$directory" $i $Resolution $Resolution $Resolution   
    done    


for j in `seq 100 150`;
    do
            python plotsurfdens.py "$directory" $j $Resolution 
    done    

rm -rf "$directory"/*.txt