Il motivo per cui il tuo tentativo non ha funzionato è perché <
si aspetta un nome file e gli hai fornito una stringa. Dovresti fare qualcosa come
echo "YOURQUERYSTRINGHERE">tmpfile
mysql --host=localhost --user=user --password=password dbname <tmpfile
il suggerimento di ken di
mysql --host=localhost --user=user --password=password -e "QUERY" dbname
può funzionare, ma se provi a utilizzare le variabili bash nella tua query puoi cadere nell'espansione dei parametri. es
QUERY="select * from $MYTABLE WHERE name=\"[email protected]\";"
mysql --host=localhost --user=user --password=password -e "$QUERY" mydbname
potrebbe non fare ciò che ti aspetti. Un'opzione è use
echo "$QUERY"|mysql --host=localhost --user=user --password=password mydbname
che funziona se la stringa di query contiene virgolette appropriate. Un'altra opzione è il documento "here" come suggerito da dogbane.
Prova a utilizzare un documento here come questo:
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
In alternativa, inserisci tutti i tuoi comandi in un file di testo ed eseguilo:
mysql --host=localhost --user=user --password=password < commands.sql
Prova così:
echo "select 1" | mysql
mysql --batch --silent -e 'SHOW TABLES';
Batch e silent sono utili se hai intenzione di reindirizzare l'output