La raison pour laquelle votre tentative n'a pas fonctionné est que le <
attend un nom de fichier et vous lui avez fourni une chaîne. Vous auriez à faire quelque chose comme
echo "YOURQUERYSTRINGHERE">tmpfile
mysql --host=localhost --user=user --password=password dbname <tmpfile
la suggestion de ken de
mysql --host=localhost --user=user --password=password -e "QUERY" dbname
peut fonctionner, mais si vous essayez d'utiliser des variables bash dans votre requête, vous pouvez tomber sous le coup de l'expansion des paramètres. par exemple
QUERY="select * from $MYTABLE WHERE name=\"[email protected]\";"
mysql --host=localhost --user=user --password=password -e "$QUERY" mydbname
peut ne pas faire ce que vous attendez.Une option est d'utiliser
echo "$QUERY"|mysql --host=localhost --user=user --password=password mydbname
qui fonctionne si la chaîne de requête contient des guillemets appropriés. Une autre option est le document "ici" comme suggéré par dogbane.
Essayez d'utiliser un document ici comme celui-ci :
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
Vous pouvez également placer toutes vos commandes dans un fichier texte et l'exécuter :
mysql --host=localhost --user=user --password=password < commands.sql
Essayez comme ceci :
echo "select 1" | mysql
mysql --batch --silent -e 'SHOW TABLES';
Le traitement par lots et le silence sont pratiques si vous prévoyez de canaliser la sortie