'.png)
Eu criei um script de shell que usa informações armazenadas em um arquivo de configuração. O problema que estou enfrentando é que quando tento passar determinados valores armazenados no arquivo de configuração, para uso pelo script Shell, recebo um erro de sintaxe.
Por exemplo:
config.conf
host=localhost
user=user
password=GhR6R3#h]dSq+C74)Jz9CDF6a7^&L[4= (not my real password)
db_name=database
script.sh
# 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
Isto é o que acontece quando tento executar o script:
$ bash script.sh
Syntax error near unexpected token `)'
`password=GhR6R3#h]dSq+C74)Jz9CDF6a7^&L[4='
O problema parece estar relacionado a determinados caracteres usados na minha senha gerada aleatoriamente. Tentei colocar $password
aspas e quando não funcionou, fiz o mesmo com a senha real armazenada no arquivo de configuração, mas novamente não tive sucesso.
Qual é a melhor maneira de resolver esse problema?
Responder1
Use aspas duplas tanto quanto possível.
config.conf deveria ser como
host="localhost"
user="user"
password="GhR6R3#h]dSq+C74)Jz9CDF6a7^&L[4="
db_name="database"
E do que o seu comando:
mysqldump --lock-tables -h "${host}" -u "${user}" -p"${password}" "${db_name}" > dbbackup_`date +"%Y%m%d"`.bak
e você deve estar seguro.