В bash, как я могу интерполировать $(...) в строке?
Я пытаюсь написать bash script, который выполняет mysqldump в моей базе данных в реальном времени, а затем добавляет и записывает дамп в репозиторий git. Вот что я до сих пор (хранящийся в файле .sh, который вызывается записью crontab):
/usr/bin/mysqldump --skip-comments --skip-dump-date -u [user] -p[pass] database | gzip > /var/www/site/backup/database.sql.gz
cd var/www/site/backup && git add *
cd var/www/site/backup && git commit -m 'Database $(date +%a %H:%M %h %d %Y)'
Моя запись crontab выглядит так:
0,20,40 8-22 * * * /var/www/site/backup/script.sh
Я вижу, что этот script делает дамп базы данных, но не добавляет или не переносит файл на git. Есть что-то, чего я не хватает?
Изменить =================================
Я сделал следующие изменения, и работа фиксации:
cd /var/www/site/backup && /usr/bin/git add *
cd /var/www/site/backup && /usr/bin/git commit -m 'Database $(date +%a %H:%M %h %d %Y)'
Однако дата не вычисляется.
Изменить =================================
Последние изменения, включая (большинство) рекомендаций
/usr/bin/mysqldump --skip-comments --skip-dump-date -u [user] -p[pass] database > /var/www/site/backup/database.sql
cd var/www/site/backup
/usr/bin/git add *
/usr/bin/git commit -m "Internal Forms Live Database Dump Stored $(date '+%a %H:%M %h %d %Y')"
Ответы
Ответ 1
$(...)
и другие формы подстановок не интерполируются в однокасканных строках.
Итак, если вы хотите, чтобы ваша дата была рассчитана, сделайте
git commit -m "Database $(date '+%a %M:%H %h %d %Y')"
то есть вся строка сообщения имеет двойную кавычку, чтобы позволить $(...)
интерполировать, в то время как аргумент date
находится в одинарных кавычках, чтобы сделать его единственным аргументом (переданным в date
).