web-dev-qa-db-ja.com

bashでは、文字列の$(...)をどのように補間しますか?

ライブサイトのデータベースでmysqldumpを実行し、ダンプをgitリポジトリに追加してコミットするbashスクリプトを記述しようとしています。これが私がこれまでに持ってきたものです(crontabエントリによって呼び出される.shファイルに格納されています)。

/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

このスクリプトはデータベースをダンプしますが、ファイルを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')"
23
Hoytman

$(...)および 他の形式の置換は、単一引用符で囲まれた文字列では補間されません

したがって、日付を計算したい場合は、

_git commit -m "Database $(date '+%a %M:%H %h %d %Y')"
_

つまり、メッセージ文字列全体が二重引用符で囲まれて$(...)が補間され、dateへの引数が単一引用符で囲まれて単一の引数になります(date)。

38
kostix