Как прочитать переменную из файла, изменить и сохранить ее в другой переменной - PullRequest
2 голосов
/ 03 мая 2020

Что я хочу:

Существует файл /scripts/backup/config.cfg, который содержит переменные. В моем конкретном случае c важными являются:

BACKUPLOCATION=""
ROOTLOCATION="/backup"

Тогда есть сценарий /scripts/backup/performBackup.sh По определенной причине c я хочу, чтобы часть скрипта выполняла следующие операции:

  1. считывание значения переменной ROOTLOCATION
  2. add a ("/" и ) отметка времени (Дата и время)
  3. сохранит новое созданное значение в BACKUPLOCATION (заменив его текущее значение)

Пример

Если это предыдущее состояние config.cfg:

BACKUPLOCATION="dummy"
ROOTLOCATION="/backup"

После запуска скрипта должно быть:

BACKUPLOCATION="/backup/2020-05-02-23-00"
ROOTLOCATION="/backup/"

Что я пробовал

Прежде всего файл конфигурации "загружается" используя

source /scripts/backup/config.cfg

Затем я попытался использовать команду sed, но кавычки мне мешают. Вот одна попытка (которая не сработала):

sed -i 's/BACKUPLOCATION\=.*/BACKUPLOCATION="'$ROOTLOCATION/$(date +%Y-%m-%d-%H-%M)'"/' /scripts/backup/config.cfg

1 Ответ

1 голос
/ 03 мая 2020

Попробуйте:

source /scripts/backup/config.cfg
sed -i 's|BACKUPLOCATION=.*|BACKUPLOCATION="'"$ROOTLOCATION/$(date +%Y-%m-%d-%H-%M)"'"|' /scripts/backup/config.cfg

Проблема с вашим sed состоит в том, что вы используете / в качестве разделителя, который присутствует в $ROOTLOCATION после расширения, поэтому sed завершается ошибкой. Я использовал |, который обычно отсутствует в именах файлов. Если вы когда-нибудь создадите файл с |, этот sed тоже не удастся! Итак, «знай свои данные» :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...