Bash - Funktionsdefinition im Skript nach dem ersten Aufruf schreiben (als GOTO / Sprung-Problematik)

7

Ich möchte mir im Grunde ein bash-Skript schreiben, wo ich ein paar große Dateien mit erstellen würde heredoc ; und dann einige Befehle mit diesen Dateien ausführen.

Es versteht sich, dass (offensichtlich) die heredoc-Dateien generiert werden müssen, bevor die Befehle ausgeführt werden - was mich jedoch irritiert, ist, dass ich auch den 'heredoc' -Anweisungscode schreiben muss, vor Ich schreibe den Befehlscode.

Also dachte ich, ich würde die heredoc-Anweisungen in einer Funktion schreiben - aber immer noch das gleiche Problem: Kapitel 24 Funktionen sagt:

  

Die Funktionsdefinition muss dem ersten Aufruf vorangestellt sein. Es gibt keine Methode, die Funktion zu "deklarieren", wie zum Beispiel in C.

Tatsächlich ist es so:

%Vor%

Dann dachte ich, ich könnte vielleicht ein paar Labels platzieren und mit GOTO herumspringen, wie in (Pseudocode):

%Vor%

... aber es stellt sich heraus, BASH goto existiert auch nicht .

Mein einziges Ziel ist das - ich möchte zuerst den "Kern" der Skriptdatei schreiben, was etwa fünf bis sechs Befehle sind; und nur then schreiben die heredoc-Anweisungen in die Skriptdatei (die Hunderte von Zeilen enthalten kann); Wenn ich die heredocs zuerst habe, macht es mir wirklich schwer, den Code zu lesen. Gibt es einen Weg, das zu erreichen?

    
sdaau 23.11.2011, 21:03
quelle

3 Antworten

15

Eine übliche Technik ist:

%Vor%     
William Pursell 23.11.2011, 21:10
quelle
3

In Bash müssen Sie die gesamte Funktion vor dem Aufruf definieren. Wenn Sie zuerst das Kernskript schreiben möchten, können Sie die Anweisungen von here- doc in eine andere Skriptdatei schreiben und sie bei Bedarf aufrufen und die zurückgegebenen Werte Ihrem Kernskript zuweisen.

    
jaypal singh 23.11.2011 21:09
quelle
3

BASH scannt die Datei linear und führt Anweisungen so aus, wie sie auf sie stoßen, genau wie in der Befehlszeile. Es gibt zwei Möglichkeiten, wie ich das tun kann, was Sie wollen. Zuerst könnten Sie den code-generierenden heredoc, etc. in eine separate Datei schreiben (zB helperfile.sh) und mit . helperfile.sh versehen. Das ist wahrscheinlich das Beste. Du könntest auch am Anfang eine Funktion schreiben ( main vielleicht), die das tut, was du willst, dann den heredoc code, dann unten am unteren Rand main .

    
Kevin 23.11.2011 21:12
quelle

Tags und Links