Ich möchte in einer Datei auf einem meiner Server einen String durch einen anderen ersetzen. Ich habe Folgendes versucht:
ssh $REMOTE_HOST sed 's|export ${KEY}=${VAL}|export ${KEY}=${NEW_VAL}|' "$ENV_FILE"
Und eine Reihe von Varianten mit unterschiedlichen Anführungszeichen, aber ich bekomme es einfach nicht zum Laufen. Der sed-Befehl funktioniert, wenn ich die Variablen manuell durch die Werte ersetze und ihn auf dem Server ausführe.
Der obige Befehl gibt den folgenden Fehler aus:
bash: {env_file_redacted}: Permission denied
bash: line 0: export: `=': not a valid identifier
bash: line 0: export: `=': not a valid identifier
sed: -e expression #1, char 1: unterminated `s' command
Wie gesagt, der Befehl funktioniert, wenn ich ihn auf dem Server ausführe, es liegt also kein Berechtigungsproblem vor.
Was ist hier das Problem?
Antwort1
Wenn alle Variablen (außer $REMOTE_HOST) in der Umgebung auf Ihrem Remote-Server verfügbar sind, können Sie Folgendes versuchen:
ssh $REMOTE_HOST 'echo sed "s|export ${KEY}=${VAL}|export ${KEY}=${NEW_VAL}|" "$ENV_FILE"'
Und wenn alles gut aussieht, entfernen Sie echo
.
Aktualisieren
Mit lokalen Variablen:
ssh $REMOTE_HOST "echo sed \"s|export ${KEY}=${VAL}|export ${KEY}=${NEW_VAL}|\" \"$ENV_FILE\""
Und wenn alles gut aussieht, entfernen Sie echo
.