Ejecute sed como un comando ssh único

Ejecute sed como un comando ssh único

Me gustaría sustituir una cadena por otra en un archivo de uno de mis servidores. Intenté hacer esto:

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

Y un montón de variantes con diferentes tipos de citas, pero no puedo hacerlo funcionar. El comando sed funciona cuando sustituyo manualmente las variables con los valores y lo ejecuto en el servidor.

El comando anterior da el siguiente error:

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 dije, el comando funciona cuando lo ejecuté en el servidor, por lo que no es un problema de permisos.

¿Cuál es el problema aquí?

Respuesta1

Si todas las variables (aparte de $REMOTE_HOST) están disponibles en el entorno de su servidor remoto, puede intentar:

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

Y si todo se ve bien, retírelo echo.

Actualizar

Con variables locales:

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

Y si todo se ve bien, retírelo echo.

información relacionada