Der Grund, warum Ihr Versuch nicht funktioniert hat, war der <
erwartet einen Dateinamen und Sie füttern ihn mit einer Zeichenkette. Sie müssten so etwas tun wie
echo "YOURQUERYSTRINGHERE">tmpfile
mysql --host=localhost --user=user --password=password dbname <tmpfile
kens Vorschlag von
mysql --host=localhost --user=user --password=password -e "QUERY" dbname
kann funktionieren, aber wenn Sie versuchen, Bash-Variablen in Ihrer Abfrage zu verwenden, können Sie mit der Parametererweiterung in Konflikt geraten. zB
QUERY="select * from $MYTABLE WHERE name=\"[email protected]\";"
mysql --host=localhost --user=user --password=password -e "$QUERY" mydbname
möglicherweise nicht das, was Sie erwarten. Eine Option ist use
echo "$QUERY"|mysql --host=localhost --user=user --password=password mydbname
was funktioniert, wenn die Abfragezeichenfolge entsprechende Anführungszeichen enthält. Eine weitere Option ist das "hier"-Dokument, wie von dogbane vorgeschlagen.
Versuchen Sie, ein Here-Dokument wie dieses zu verwenden:
mysql --host=localhost --user=user --password=password << END
CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'jakdJxct8W';
CREATE DATABASE IF NOT EXISTS 'testuser_dev' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
GRANT ALL PRIVILEGES ON 'testuser_dev' . * TO 'testuser'@'localhost';
CREATE DATABASE IF NOT EXISTS 'testuser_qa' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
GRANT ALL PRIVILEGES ON 'testuser_qa' . * TO 'testuser'@'localhost';
END
Alternativ platzieren Sie alle Ihre Befehle in einer Textdatei und führen Sie sie aus:
mysql --host=localhost --user=user --password=password < commands.sql
Versuchen Sie es folgendermaßen:
echo "select 1" | mysql
mysql --batch --silent -e 'SHOW TABLES';
Batch und Silent sind praktisch, wenn Sie die Ausgabe leiten möchten