Bash - schreiben Funktionsdefinition im Skript nach dem ersten Anruf (GEHE zu/springe-Problematik)
Ich im Grunde möchten, schreiben Sie mir ein bash-script, wo ich generieren, ein paar große Dateien mit heredoc; und dann führen Sie einige Befehle, mit denen Dateien.
Ist es selbstverständlich, dass (natürlich) die heredoc-Dateien müssen erzeugt werden, bevor die Befehle ausgeführt werden - was allerdings irritiert mich, dass in Anordnung ist, muss ich auch schreiben, die "heredoc" - Aussagen-code vor Schreibe ich den Befehl code.
So, ich dachte, ich würde schreiben Sie die heredoc-Anweisungen in einer Funktion - aber immer noch das gleiche problem hier: Kapitel 24. Funktionen sagt:
Die Funktionsdefinition muss vor dem ersten Aufruf an. Es gibt keine Methode der "Deklaration" die Funktion, wie zum Beispiel in C.
In der Tat, es ist so:
$ cat > test.sh <<EOF
testo
function testo {
echo "a"
}
EOF
$ bash test.sh
test.sh: line 1: testo: command not found
Dann dachte ich, vielleicht könnte ich einige labels und springen um mit GOTO
wie in (pseudocode):
$ cat > test.sh <<EOF
goto :FUNCLABEL
:MAIN
testo
goto :EXIT
:FUNCLABEL
function testo {
echo "a"
}
goto MAIN
:EXIT
... aber es stellt sich heraus BASH goto nicht existieren.
Mein einziges Ziel ist es, dass - ich will zuerst schreiben der "Kern" der Skript-Datei, die einige fünf-sechs-Befehle; und nur dann schreiben Sie die heredoc-Anweisungen in der script-Datei (die haben Hunderte von Zeilen); mit dem heredocs ersten wirklich macht das Lesen des Codes schwer für mich. Gibt es irgendeine Möglichkeit das zu erreichen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist eine verbreitete Technik ist:
main "$@"
notwendig ist. (Beachten Sie die Anführungszeichen, die erforderlich sind, um bestimmte Argumente, meist solche mit Leerzeichen.)In der Bash haben Sie zum definieren der gesamten Funktion vor dem Aufruf. Wenn Sie wollen, schreiben Sie das core-Skript zuerst, dann Sie können schreiben Sie die heredoc-Aussagen in einem anderen Skript-Datei, und nennen Sie es, Wann immer Sie Lust und zuweisen der Werte zurückgegeben werden (können), um Ihre Kern-Skript.
BASH scannt die Datei Linear und führt Anweisungen aus, so kommt es über Sie, so wie es tut, wenn man auf der Kommandozeile. Es gibt zwei Möglichkeiten, die ich sehe, zu tun, was Sie wollen. Erste, Sie konnte schreiben Sie die code-Generierung der heredoc -, etc. in einer separaten Datei (sagen helperfile.sh) und die Quelle es mit
. helperfile.sh
. Das ist wohl am besten. Man könnte auch eine Funktion schreiben, die (main
vielleicht) am Anfang das tut, was Sie wollen, dann ist die heredoc-code, dann unten rufenmain
.main
Funktion ist die Antwort (will alles haben, was man-Skript, jetzt, ich bin der heredoc-ing); Pursell, William kam gerade ein bisschen früher als bei Euch 🙂 Cheers!