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
.