Я хочу использовать скрипт bash для запуска резервного копирования, а затем отправить мне электронное письмо с помощью ssmtp. Я пытаюсь сделать общий сценарий, который я могу использовать на разных машинах Linux. Ниже приведен фрагмент скрипта, где я использую sed для замены некоторого текста-заполнителя на переменные $HOSTNAME и $DATE . По какой-то причине, когда он запускается, я получаю электронное письмо, но вместо того, чтобы вставить имя хоста и дату, он стирает заполнители. Может кто-то указать, что я делаю не так?

Вот раздел моего сценария:

sed -i -e "s/HNAME/$HOSTNAME/g" backup_notification
sed -i -e "s/DATETIME/$date/g" backup_notification

ssmtp me@domain.org < backup_notification

Вот текстовый файл уведомления (HNAME и DATETIME - это заполнители, которые я хочу заменить sed информацией о системных переменных):

To: me@domain.org
From: administrator@webserver.domain.org
Subject: Backup completed

This confirms that backup is completed for HNAME on DATETIME.

А вот что содержит текст письма (обратите внимание, что заполнители HNAME и DATETIME были удалены или заменены на nil.):

-----Original Message-----
From: root [mailto:root@domain.org] 
Sent: Thursday, March 10, 2016 1:15 PM
To: Me
Subject: Backup completed

This confirms that the backup is completed for has been renewed on .

ТИА за любую помощь :)!

2 ответа2

1

$ HOSTNAME и $ DATE по умолчанию не определены как переменные. Вместо этого используйте $(command) для вставки вывода (stdout) из command в строку.

Например, в вашем случае замените $ HOSTNAME на то, что вы хотите использовать $(hostname) и $(date):

sed -i -e "s/HNAME/$(hostname)/g" backup_notification
sed -i -e "s/DATETIME/$(date)/g" backup_notification

Кроме того, флаг -i на sed будет редактировать ваш шаблон backup_notification, как указано @ user568271. Если вы этого не хотите, вы можете прочитать его и отредактировать с помощью канала:

cat backup_notification | sed -e "s/HNAME/$(hostname)/g" | sed -e "s/DATETIME/$(date)/g" | ssmtp me@domain.org
0

Разве ключ -i не собирается «редактировать на месте» файл шаблона сообщения.

Вам не понадобится неизменная версия шаблона в уведомлении о резервном копировании в начале процесса резервного копирования?

В качестве альтернативного метода, вы рассматривали возможность использования echo со строкой, которая использует представляющие интерес переменные, переданные в вашу команду ssmtp?

echo this confirms that backup has been completed and renewed for $HOSTNAME on $DATE | ssmtp me@domain.org

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .