2016-04-06 20 views
0

Ich würde gerne. SH-Skript schreiben, die mehrere Skripte in demselben Verzeichnis nacheinander ausgeführt werden, ohne sie gleichzeitig auszuführen (ex während der erste noch ausgeführt wird, startet der zweite nicht Ausführen).Führen Sie Sh-Skripte nacheinander

Können Sie mir den Befehl sagen, der vor dem Namen des Skripts geschrieben werden könnte, der das eigentliche Ding tut?

Ich habe versucht, source aber es gibt die folgende Meldung für jeden aufgeführten Skript

./outer_script.sh: source: not found 
+0

Haben Sie Ihr 'bash' probiert? oder 'sh'? oder '.'? –

+0

Schreiben Sie nicht einfach 'script1; script2; ... '? Oder, wenn sie nicht bereits ausführbar sind oder sich das aktuelle Verzeichnis nicht in Ihrem PATH befindet (und sich die Skripte im aktuellen Verzeichnis befinden): 'bash script1; Bash-Skript2; ... '.Die Shell führt Befehle standardmäßig sequenziell aus. –

+0

- Jonathan Leffler Danke! Funktioniert gut! – Reqwy

Antwort

0

Das ist normales Verhalten des bash-Skripts. dh, wenn Sie drei Skripte haben:

script1.sh:

echo "starting" 
./script2.sh 
./script3.sh 
echo "done" 

script2.sh:

while [ 1 ]; do 
    echo "script2" 
    sleep 2 
done 

und script3.sh:

echo "script3" 

Die Ausgabe lautet:

starting 
script2 
script2 
script2 
... 

und script3.sh wird nie ausgeführt werden, es sei denn, Sie script1.sh ändern sein: die Ausgabe so etwas wie

echo "starting" 
./script2.sh & 
./script3.sh & 
echo "done" 

in diesem Fall sein wird:

starting 
done 
script2 
script3 
script2 
script2 
... 

Also in diesem Fall I Angenommen, Ihre Skripte der zweiten Ebene enthalten etwas, das neue Prozesse startet.

1

source ist eine Nicht-Standard-Erweiterung von bash eingeführt. POSIX gibt an, dass Sie den Befehl . verwenden müssen. Anders als der Name sind sie identisch.

Allerdings möchten Sie wahrscheinlich nicht Quelle, denn das ist nur soll verwendet werden, wenn Sie das Skript in der Lage sein, den Zustand des Skripts, das es aufrufen, ändern können. Es ist wie eine #include oder import Aussage in anderen Sprachen.

Normalerweise möchten Sie das Skript nur direkt als Befehl ausführen, d. H. Weder source noch einen anderen Befehl voranstellen.

Als kurzes Beispiel nicht Quelle:

for script in scripts/*; do 
    "$script" 
done 

Wenn die oben nicht funktioniert, stellen Sie sicher, dass Sie die ausführbare Bit gesetzt haben (chmod a+x) über die notwendigen Skripte.

0

Haben Sie die Zeile #! Bin/bash in Ihr Outer_script eingefügt? Einige Betriebssysteme betrachten es nicht als bash, und source als Bash-Befehl. Sonst rufen Sie einfach die Skripte mit ./path/to/script.sh im äußeren_script auf

Verwandte Themen