Hallo zusammen,
zur Zeit schreibe ich gerade ein klassisches Bash-Script - zum Backup 😉 Dabei bin ich über etwas gestolpert, bei dem ich mich über Hilfe von euch freuen würde.
Konkret muss ich einen MySQL-Dump laden. Das geht wunderbar in der Konsole mit:
1 | mysql --user=root --password=<password> < <file> |
Gleiches gilt, wenn ich den Befehl direkt im Script ausführe. Jedoch möchte ich die Befehle bei der Ausführung gleich loggen (ohne zweiten Befehl), weshalb ich mir folgende Methode geschrieben habe:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | issueCommand(){ # $1: Description of command # $2: Command to execute # $3: 0=continue execution; abort otherwise echo "$1..." | log echo $2 | log MSG=$($2 2>&1) RESPONSE=$? echo $MSG | log if [ "$RESPONSE" -gt 0 ]; then echo "$1... error: $RESPONSE" | log if [ "$3" -gt 0 ]; then echo "exit script" | log exit $RESPONSE else echo "continue script" | log fi else echo "$1... success" | log fi return $RESPONSE } |
Diese funktioniert auch wunderbar, jedoch nicht im Fall des mysql-Imports, was dann so aussieht:
1 | issueCommand "Beschreibung" "mysql --user=root --password=<password> < <file>" 1 |
Dann erhalte ich nämlich folgenden Fehler:
mysql Ver 14.14 Distrib 5.5.38, for debian-linux-gnu (i686) using readline 6.2 Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Usage: ...
Versucht habe ich ebenfalls folgende Variante:
1 | issueCommand "Beschreibung" "cat <file> | mysql --user=root --password=<password>" 1 |
Dabei erhalte ich dann folgende Fehlermeldung:
cat: unrecognized option '--user=root' Try `cat --help' for more information.
Im Endeffekt wird ja in der Methode nichts anderes ausgeführt als
1 | $(cat <file> | mysql --user=root --password=<password>) |
was in der Konsole auch wunderbar funktioniert. Könnt ihr mir verraten, wo der Fehler liegt? Über Idee würde ich mich freuen!