Page 1 of 1

Variablen in ein Shellscript einlesen

Posted: 2004-03-13 22:19
by tenshinhan10
Ich möchte aus einer Config Datei Variablen in ein Shellscript einlesen. Da mir Include zu unsicher erscheint, suche ich nach einer Lösung, die nur benötigte Variablen aus der Config Datei zieht.

Es funktioniert derzeit schon. Problem ist nur, das er Zeilenumbrüche nicht richtig erkennt.

Configfile funktioniert:

Code: Select all

VARIABLE1=xxxxx VARIABLE2=xxxxx VARIABLE3=xxxxx
Configfile funktioniert nicht:

Code: Select all

VARIABLE1=xxxxx
VARIABLE2=xxxxx
VARIABLE3=xxxxx
So sieht der Shell Code zum auslesen aus.

Code: Select all

CONFIG="MEINEPFADANGABE"
VARIABLE1INPUT=$(tr ' ' 'n' < $CONFIG | awk '/VARIABLE1/ {sub(".*=", ""); print;}')
VARIABLE2INPUT=$(tr ' ' 'n' < $CONFIG | awk '/VARIABLE2/ {sub(".*=", ""); print;}')
VARIABLE3INPUT=$(tr ' ' 'n' < $CONFIG | awk '/VARIABLE3/ {sub(".*=", ""); print;}')
Wenn ich dies dann einbaue habe ich wie oben erwähnt Zeilenumbrüche drin. Ich nehme an das kommt durch die Configfiles, in denen nach jeder Zeile ein:

Code: Select all

^M
steht. Meine Frage ist, ob man dies noch rausfiltern kann.

Ich hab schon folgendes ohne Erfolg versucht:
VARIABLE1INPUT=$(tr ' ' 'n' < $CONFIG | awk '/VARIABLE1/ {sub(".*=", "", "^M"); print;}')

Re: Variablen in ein Shellscript einlesen

Posted: 2004-03-13 23:04
by tuxi
hat das ^M nicht irgendetwas mit Zeilenumbrüchen im M$-Stil zu tun?

Warum nimmst du nicht normale Definitionen und machst ein source auf das File?

Re: Variablen in ein Shellscript einlesen

Posted: 2004-03-13 23:24
by tenshinhan10
^M kommt leider immer rein, wenn das Configfile durch meinen WebFTP verändert wird. Es sollte möglich sein, das irgendwie abzuschneiden b.z.w. auszugrenzen.

Kannst Du mir bitte für Deinen Vorschlag einen Beispielcode posten ?

Re: Variablen in ein Shellscript einlesen

Posted: 2004-03-13 23:35
by tuxi
tenshinhan10 wrote:Kannst Du mir bitte für Deinen Vorschlag einen Beispielcode posten ?
Beschreibung zum Befehl source aus der Manpage von bash:
source filename [arguments]
Read and execute commands from filename in the current shell
D.h. ein File erstellen mit deinen Variablen, wie gewohnt durch neue Zeilen und dieses dann in deinem Shellskript mittels source filename einbinden.

Re: Variablen in ein Shellscript einlesen

Posted: 2004-03-13 23:42
by wirsing
tenshinhan10 wrote:Ich hab schon folgendes ohne Erfolg versucht:

Code: Select all

VARIABLE1INPUT=$(tr ' ' 'n' < $CONFIG | awk '/VARIABLE1/ {sub(".*=", "", "^M"); print;}')
Probier doch stattdessen mal

Code: Select all

VARIABLE1INPUT=$(tr ' ' 'n' < $CONFIG | awk '/VARIABLE1/ {sub(".*=", "", "r"); print;}')
r ist der Literal für Carriage Return, so wie n für Line Feed steht.
Alternativ: benutze einen ordentlichen FTP-Client und lade die Datei im ASCII-Modus hoch
ODER: nimm die Carriage Returns mit dos2unix raus.

Re: Variablen in ein Shellscript einlesen

Posted: 2004-03-14 01:37
by tenshinhan10
Vielen Dank für die Antworten.

@tuxi: Die Lösung mit Source b.z.w. include ist zu unsicher. Neben den Variablen kann so ziemlich alles noch in die Config und damit auch ins Shellscript kommen.

@wirsing: Ich hab Carriage Return getestet. Dies schneidet mir die ^M auch raus. Jedoch ist dann die Config nur noch ein Klumpen und er kann das nicht ordentlich zuordnen. Ich hab dann im Shellscript VARIABLE1=xxxx statt xxxx stehen. Dos2Unix arbeitet einwandfrei. Damit habe ich den Fehler weg bekommen. Ich werde aber trotzdem mal weiter suchen, da ich mir sicher bin, wenn ich das Script 10 mal zur gleichen Zeit aufrufe wirds einiges an CPU Last geben. Eine andere Möglichkeit habe ich noch gefunden:

perl -p -i -e 's/rn/n/g' <filename>

Die werde ich nochmal in Ruhe testen.