'.png)
Ich habe ein Shell-Skript erstellt, das in einer Konfigurationsdatei gespeicherte Informationen verwendet. Das Problem, mit dem ich konfrontiert bin, ist, dass ich einen Syntaxfehler erhalte, wenn ich versuche, bestimmte in der Konfigurationsdatei gespeicherte Werte zur Verwendung durch das Shell-Skript zu übergeben.
Zum Beispiel:
config.conf
host=localhost
user=user
password=GhR6R3#h]dSq+C74)Jz9CDF6a7^&L[4= (not my real password)
db_name=database
Skript.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
Folgendes passiert, wenn ich versuche, das Skript auszuführen:
$ bash script.sh
Syntax error near unexpected token `)'
`password=GhR6R3#h]dSq+C74)Jz9CDF6a7^&L[4='
Das Problem scheint mit bestimmten Zeichen in meinem zufällig generierten Passwort zusammenzuhängen. Ich habe versucht, es $password
in Anführungszeichen zu setzen, und als das nicht funktionierte, habe ich dasselbe mit dem eigentlichen Passwort gemacht, das in der Konfigurationsdatei gespeichert ist, aber auch hier hatte ich keinen Erfolg.
Wie lässt sich dieses Problem am besten lösen?
Antwort1
Verwenden Sie so oft wie möglich doppelte Anführungszeichen.
config.conf sollte so aussehen
host="localhost"
user="user"
password="GhR6R3#h]dSq+C74)Jz9CDF6a7^&L[4="
db_name="database"
Und dann Ihr Befehl:
mysqldump --lock-tables -h "${host}" -u "${user}" -p"${password}" "${db_name}" > dbbackup_`date +"%Y%m%d"`.bak
und Sie sollten in Sicherheit sein.