Führen Sie sed als einmaligen SSH-Befehl aus

Führen Sie sed als einmaligen SSH-Befehl aus

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.

verwandte Informationen