mal wieder escape probleme bei script

T

tco

sysinstall/noob
bzw. bash einzeiler:

ich versuche über ssh einen sed zu machen. natürlich frisst sed den so nicht. mir ist nur nicht ganz klar was ich escapen muss...
kann sich das mal einer anschauen?

Code:
ssh user@host "/usr/bin/sed -e 's!<sysproperty key="hostname" value1="." value2="."/>!<sysproperty key="hostname" value="$newvalue1" value2="false"/>!g' -e 's!<sysproperty key="hostname" value="$newvalue1" value2="."/>!<sysproperty key="hostname" value1="$nrmihostname" value2="true"/>!g' path/file.xml.saved > path/file.xml"

da sed wohl immer nur eine anweisung ausführt sind zwei anweisungen dabei. value1 und value2 sind dabei schon gesetzt. value2 idR mir false. ich versuch mit dem '.' beide fälle abzufangen.
however, lokal funktiert das. über ssh nicht mehr...

danke schonmal!
 
Da du den Befehl mit doppelten Anführungszeichen einleitest, müssen sämtliche weiteren bis zu den schliessenden doppelten Anführungszeichen escaped werden. Sonst ist nämlich der Befehl, den du via SSH ausführst, der folgende: "/usr/bin/sed -e 's!<sysproperty key=". Alles was danach kommt gehört dann für die Shell nicht mehr zum Befehl.

Ausserdem wird die Shell vermutlich Variablen wie $newvalue1 als Umgebungsvariablen interpretieren und sie durch leere Werte ersetzen, sofern sie nicht tatsächlich als Umgebungsvariablen definiert sind.

Nachtrag: Zweiteres würde ich allerdings nicht beschwören, da ja die Sed-Anweisungen mit einfachen Anführungsstrichen geklammert sind, was die Interpretation von Variablen eigentlich verhindern sollte.
 
Zuletzt bearbeitet:
Da du den Befehl mit doppelten Anführungszeichen einleitest, müssen sämtliche weiteren bis zu den schliessenden doppelten Anführungszeichen escaped werden. Sonst ist nämlich der Befehl, den du via SSH ausführst, der folgende: "/usr/bin/sed -e 's!<sysproperty key=". Alles was danach kommt gehört dann für die Shell nicht mehr zum Befehl.

Ausserdem wird die Shell vermutlich Variablen wie $newvalue1 als Umgebungsvariablen interpretieren und sie durch leere Werte ersetzen, sofern sie nicht tatsächlich als Umgebungsvariablen definiert sind.

Nachtrag: Zweiteres würde ich allerdings nicht beschwören, da ja die Sed-Anweisungen mit einfachen Anführungsstrichen geklammert sind, was die Interpretation von Variablen eigentlich verhindern sollte.

hat mir geholfen, danke!
ich musste alle doppelten anführungszeichen escapen. dazu noch $newvalue1 in einfache anführungszeichen setzen.
 

Ähnliche Themen

Windows clients können nicht mehr auf lange laufendes System zugreifen

Problem mit HSPA+ Modem Huawei E353 - Installation unmöglich?

Wieder mal Probleme mit yum

Samba Update von 3.2.5 auf 3.5.6 - Probleme beim Server Browsen

OS X SSH bereit machen

Zurück
Oben