Execute sed como um comando ssh único

Execute sed como um comando ssh único

Gostaria de substituir uma string por outra em um arquivo de um servidor meu. Eu tentei fazer isso:

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

E um monte de variantes com diferentes tipos de citações, mas simplesmente não consigo fazer funcionar. O comando sed funciona quando substituo manualmente as variáveis ​​pelos valores e executo no servidor.

O comando acima dá o seguinte erro:

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

Como eu disse, o comando funciona quando o executei no servidor, portanto não é um problema de permissão.

Qual é o problema aqui?

Responder1

Se todas as variáveis ​​(exceto $REMOTE_HOST) estiverem disponíveis no ambiente do seu servidor remoto, você pode tentar:

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

E se tudo parecer bem, remova echo.

Atualizar

Com variáveis ​​locais:

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

E se tudo parecer bem, remova echo.

informação relacionada