Я хотел бы заменить строку на другую в файле на моем сервере. Я пробовал сделать это:
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
.