Ich habe einen Befehl wie folgt aus:
ssh [email protected] 'sed -e "s|foo|${bar}|" /home/data/base_out.sql > /home/data/out.sql'
Der sed Befehl in lokalen Shell arbeitet. Aber es erweitert die Variable nicht über den Befehl ssh. Vielen Dank!
Ich habe einen Befehl wie folgt aus:
ssh [email protected] 'sed -e "s|foo|${bar}|" /home/data/base_out.sql > /home/data/out.sql'
Der sed Befehl in lokalen Shell arbeitet. Aber es erweitert die Variable nicht über den Befehl ssh. Vielen Dank!
Die Regel ist, dass in einfachen Anführungszeichen Parameter nicht erweitert werden. Sie haben einfache Anführungszeichen um den gesamten Befehl.
Try this:
ssh [email protected] "sed -e 's|foo|$bar|' /home/data/base_out.sql > /home/data/out.sql"
Jetzt $bar
erweitert wird, bevor die Befehlsfolge als Argument an ssh
übergeben wird, das ist, was Sie wollen.
Ich entfernte die geschweiften Klammern um ${bar}
, weil ich glaube, dass sie ein falsches Gefühl der Sicherheit bieten. In diesem Fall schützen sie Sie nicht vor den damit verbundenen Problemen using shell variables in sed commands.