2016-07-11 1 views
0

Hier ist mein Problem ausgeführt wird:Bash: Ausführen von Skripten in anderen Skript wirft Fehler bekomme ich sie nicht separat

Ich habe 4 Skripte zu generieren, verschiedene Dateien. Ich habe eine Quelldatei, die ich als Argument übergeben, um die anderen Ausgabedateien zu generieren. Die 4 Skripte werden nacheinander ausgeführt. Sie haben Code wie folgt:

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

Laufen sie geben mir separat die richtigen Ausgänge. Aufrufe sie von einem Haupt Skript führen falsch, mit einigen Fehlermeldungen wie:

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

Bezug also auf die Zeile oben:

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

Mein Haupt Script, die andere zu nennen ist:

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

Alle Skripte wurden auf $ chmod 755 gesetzt * .sh

Antwort

2

Sie nennen sie als sh, obwohl Ihr Shebang auf bash zeigt. Wenn Sie sie als bash nennen wollen ersetzen Sie einfach sh mit bash, zB

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

Sh einige der Funktionen fehlen bash hält, die Fehler verursachen könnten. Weitere Informationen hierzu finden Sie unter Difference between sh and bash . !

+0

Rechts. Problem gelöst! Danke euch beiden. – Joster

2

Was ich s sh auf Ihrem System? Ihre #! Zeile sieht so aus, als ob Sie die Skripte mit bash interpretieren möchten, aber Ihr Hauptskript verwendet sh, was möglicherweise nicht so vollständig wie bash ist.

+2

Es ist per Definition nicht so Feature-Complete wie 'Bash'. Wenn 'bash' als' sh' ausgeführt wird, werden viele 'bash'-Erweiterungen deaktiviert. – chepner

+0

Das ist eine Sache, die ich noch nicht sehr gut unterscheiden kann. Ist Bash eine Art "entwickeltes Sh-Skript"? In diesem Fall kann ich sie als Bash-Skripte bezeichnen. Warum sie separat als 'sh ./xxxx.sh' laufen, funktioniert gut, aber nicht von einem anderen Skript aus aufrufen – Joster

+0

Das war sicherlich das Problem. – Joster

0

In der Tat, wie ich # angegeben/bin/bash im ersten Satz kann ich tun:

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

Wie es heißt, jede ausführbare Datei mit/bin/bash laufen.

Verwandte Themen