Запустить sed как одноразовую команду ssh

Запустить sed как одноразовую команду ssh

Я хотел бы заменить строку на другую в файле на моем сервере. Я пробовал сделать это:

ssh $REMOTE_HOST sed 's|export ${KEY}=${VAL}|export ${KEY}=${NEW_VAL}|' "$ENV_FILE"

И куча вариантов с разными типами кавычек, но я просто не могу заставить это работать. Команда sed работает, когда я вручную заменяю переменные значениями и запускаю ее на сервере.

Приведенная выше команда выдает следующую ошибку:

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

Как я уже сказал, команда работает, когда я запускаю ее на сервере, так что проблема не в правах доступа.

В чем здесь проблема?

решение1

Если все переменные (кроме $REMOTE_HOST) доступны в среде на вашем удаленном сервере, вы можете попробовать:

ssh $REMOTE_HOST 'echo sed "s|export ${KEY}=${VAL}|export ${KEY}=${NEW_VAL}|" "$ENV_FILE"'

И если все выглядит нормально, удалите echo.

Обновлять

С локальными переменными:

ssh $REMOTE_HOST "echo sed \"s|export ${KEY}=${VAL}|export ${KEY}=${NEW_VAL}|\" \"$ENV_FILE\""

И если все выглядит нормально, удалите echo.

Связанный контент