'%20%E3%81%AE%E8%BF%91%E3%81%8F%E3%81%A7%E6%A7%8B%E6%96%87%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99.png)
構成ファイルに保存されている情報を使用するシェル スクリプトを作成しました。直面している問題は、シェル スクリプトで使用するために構成ファイルに保存されている特定の値を渡そうとすると、構文エラーが発生することです。
例えば:
config.conf
host=localhost
user=user
password=GhR6R3#h]dSq+C74)Jz9CDF6a7^&L[4= (not my real password)
db_name=database
スクリプト
# Load config file TODO: make this more secure
source /path/to/config.conf
# MySQL database dump
mysqldump --lock-tables -h $host -u $user -p $password $db_name > dbbackup_`date +"%Y%m%d"`.bak
スクリプトを実行しようとすると、次のようになります。
$ bash script.sh
Syntax error near unexpected token `)'
`password=GhR6R3#h]dSq+C74)Jz9CDF6a7^&L[4='
この問題は、ランダムに生成されたパスワードで使用されている特定の文字に関連しているようです。引用符で囲むことを試みました$password
が、うまくいかなかったので、構成ファイルに保存されている実際のパスワードで同じことを試しましたが、やはり成功しませんでした。
この問題を解決する最善の方法は何でしょうか?
答え1
できる限り二重引用符を使用してください。
config.confは次のようになります
host="localhost"
user="user"
password="GhR6R3#h]dSq+C74)Jz9CDF6a7^&L[4="
db_name="database"
そしてあなたの命令:
mysqldump --lock-tables -h "${host}" -u "${user}" -p"${password}" "${db_name}" > dbbackup_`date +"%Y%m%d"`.bak
あなたは安全であるはずです。