Bash:在其他脚本中运行脚本会引发错误我不会单独运行它们

时间:2016-07-11 13:37:43

标签: linux bash shell vi

这是我的问题:

我有4个脚本来生成不同的文件。我有一个源文件,我作为参数传递,以生成其他输出文件。 这4个脚本被认为是连续运行的。 他们有这样的代码:

while read line; do                                                             
    if echo "${line: -3}" | grep -q ','                                         
    then                                                                        
        if echo "${line:0:4}" | grep -q 'int'                                   
            then ...

单独运行它们会给我正确的输出。 从主脚本调用它们会执行错误,并出现一些错误消息,如:

./FirstScript.sh: 35: ./FirstScript.sh: Bad substitution

参考上面的一行:

if echo "${line: -3}" | grep -q ','

我打电话给其他人的主要剧本是:

#!/bin/bash                                                            
sh ./FirstScript.sh $1
sh ./SecondScript.sh
sh ./ThirdScript.sh $1

所有脚本都已设置为$ chmod 755 * .sh

3 个答案:

答案 0 :(得分:2)

您系统上的sh是什么?您的#!行似乎希望使用bash来解释脚本,但您的主脚本使用sh,这可能不像bash那样功能齐全。

答案 1 :(得分:2)

即使你的shebang指向sh,你也称他们为bash。如果你想把它们称为bash,只需用bash替换sh,例如

#!/bin/bash                                                            
bash ./FirstScript.sh $1
bash ./SecondScript.sh
bash ./ThirdScript.sh $1

Sh缺少bash保留的某些功能,这可能会导致错误。见Difference between sh and bash 了解有关此内容的更多信息。

答案 2 :(得分:0)

事实上,正如我在第一句中所说的那样#!/ bin / bash,我可以这样做:

#!/bin/bash                                                            
./FirstScript.sh $1
./SecondScript.sh
./ThirdScript.sh $1

据说用/ bin / bash运行每个可执行文件。