2016-07-28 18 views
0

Ich möchte ein Bash-Skript aus einem Bash-Skript erstellen. Das Problem mit alten Echo-Stil (Beispiel echo -e "einige Befehle"> /path/to/file.sh) ist die Befehle werden interpretiert und durch seine Werte ersetzt.Schreiben eines Bash-Skripts aus dem Bash-Skript. Zeilen ohne Interpretation

Googeln ich diese Lösung auf diesem Forum gefunden: Generating a bash script from a bash script

Dort sie verwenden:

cat >/path/to/file.sh <<'EOF' 
    some commands 
EOF 

Wenn ich ein Mini-Skript tun nur mit diesem, es funktioniert ... das Problem ist, während versuchen, in mein großes Skript zu integrieren ... mit einem sehr grundlegenden "einige Befehle" ... erzeugt es einen Fehler:

Warnung: Here-Dokument bei Zeile xxxx durch Dateiende begrenzt (wollte `EOF ') ./myscript.sh: Zeile xxxx: Syntaxfehler: unerwartetes Ende der Datei

Was mache ich falsch? kann nicht innerhalb dieser Funktionen verwendet werden oder was ist der Sinn des Fehlers ... Ich bin mir nicht sicher zu verstehen, was Fehler zu sagen versucht. Vielen Dank.

+2

Haben Sie 'EOF' am Anfang der Zeile (d. H. Keine Leerzeichen davor)? –

+0

omfg ... Ich habe einige Tabs, weil in meinem Code innerhalb einer Funktion ist und ich habe alle eingerückt und verschönert ... Wenn ich die Tabs auf der EOF-Zeile entfernen, funktioniert es! es stört die Schönheit meines Skripts, aber es funktioniert .... Ich fühle mich wie ein N00b:/ – OscarAkaElvis

Antwort

0

Das Ende-Trennzeichen für ein Here-Dokument muss links bündig sein, ohne jegliche Einrückung, unabhängig davon, ob es in einer Funktion oder anderswo auftritt.

Einrückung ist erlaubt, aber nur mit Registerkarten, wenn das Here-Dokument mit <<-word statt mit <<word gestartet wird (alle Anfangsregisterkarten werden dann am Anfang jeder Zeile des Here-Dokuments entfernt).

Wenn das Skript, das Sie mit Ihrem bash-Skript ausgeben, Here-Dokumente enthält, muss das Trennzeichen dieser Here-Dokumente von dem Zeichen abweichen, mit dem der Inhalt des Skripts beendet wird.

Da das Trennzeichen ein beliebiges Wort sein kann, empfiehlt es sich, ein beschreibendes Trennzeichen wie END_SCRIPT oder ähnliches zu verwenden.

+0

Thx @ Tom Fenech und Kusalananda. Es scheint, dass cat> /path/to/file.sh << - 'EOF' den Krieg gewinnt – OscarAkaElvis