bash: eval und mehrzeiliges lesen und einfügen in Datei

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
ren22

bash: eval und mehrzeiliges lesen und einfügen in Datei

Beitrag von ren22 » 09.06.2016 16:59:46

Hallo,
ich habe ein bash script, welches ich ein parameter (die "config/datei_mit_vielen_werten" datei") beim scriptstart mit angeben/mitgeben/übergeben kann (./script.sh datei_mit_vielen_werten)
, funktioniert soweit auch alles super, nun wollte ich ein echte .conf datei, also die unter /etc ihren Wohnort in der Regel hat, erstellen mit eval aber leider bekomme ich immer ein Fehler (eval: line 25: unexpected EOF while looking for matching `"')&(eval: line 26: syntax error: unexpected end of file), das eval nach einem Hochkomma " bei dem Zeilenende erwartet, da aber die echte .conf Datei über Zeilen geht geht das so halt nicht, nun suche ich eine Möglichkeit wie ich eval beibringen kann mir doch eine echte .conf Datei zustellen, aus der Datei "datei_mit_vielen_werten", siehe unten code*, in der Datei "datei_mit_vielen_werten" dient als Quelle, und eval soll am Ende, die Werte aus der "datei_mit_vielen_werten" in eine Zieldatei schreiben.

Danke



Hauptscript Code-Auszug

Code: Alles auswählen

#!/bin/bash

...
    while read line; do

        eval $line ; $(echo "$WORKAROUNDBEFORE") 

    done < $ROOTDIR/config/"$1"
...
und die "datei_mit_vielen_werten"

Code: Alles auswählen

WORKAROUNDAFTER="echo hallo test :-)"  
WORKAROUNDAFTER="cat >$BUILDDIR/$EXTNAMESRC/conf/nhttpd.conf <<EOF
#	$nostromo: nhttpd.conf-dist,v 1.22 2016/04/12 18:54:16 hacki Exp $

# MAIN [MANDATORY]

servername		localhost:12345
#servername		www.nazgul.ch:8080
serverlisten		*
#serverlisten		81.221.21.250 127.0.0.1 ::1
serveradmin		webblaster@nazgul.ch
serverroot		/mnt/bla/serverroot
servermimes		/mnt/bla/mimes/mimes
docroot			/mnt/bla/
docindex		index.html
EOF"
wobei die erste Zeile funktionieren sollte "WORKAROUNDAFTER" und bei der zweiten Zeile dann aber ein eval Fehler kommt.
Was ich gerne hätte das der code zwischen "<<EOF" und EOF in der Zweiten Zeile (WORKAROUNDAFTER) in einer Datei steht, nachdem eval diese Werte von der "datei_mit_vielen_werten" in eine andere Datei schreiben tut.

Danke

Benutzeravatar
heisenberg
Beiträge: 3564
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: bash: eval und mehrzeiliges lesen und einfügen in Datei

Beitrag von heisenberg » 11.06.2016 10:36:33

Du willst das Befehl in der Variable WORKAROUNDAFTER ausgeführt wird? Dann lasse doch die Definition durch dies Shell parsen mit dem Punkt-Kommando(Wichtig! Sonst hast Du die Variablen nicht im Hauptprogramm) und führe die Variableninhalte dann mit eval aus.

Hauptscript

Code: Alles auswählen

#!/bin/bash

. ./vars

[ -n "$WORKAROUNDAFTER" ] && eval "$WORKAROUNDAFTER"
Script mit Workarounddefinition

Code: Alles auswählen

#!/bin/bash
WORKAROUNDAFTER="cat >nhttpd.conf <<EOF
#   $nostromo: nhttpd.conf-dist,v 1.22 2016/04/12 18:54:16 hacki Exp $

# MAIN [MANDATORY]

servername      localhost:12345
#servername      www.nazgul.ch:8080
serverlisten      *
#serverlisten      81.221.21.250 127.0.0.1 ::1
serveradmin      webblaster@nazgul.ch
serverroot      /mnt/bla/serverroot
servermimes      /mnt/bla/mimes/mimes
docroot         /mnt/bla/
docindex      index.html
EOF"
Jede Rohheit hat ihren Ursprung in einer Schwäche.

Antworten