La razón por la que su intento no funcionó fue porque <
espera un nombre de archivo y lo alimentaste con una cadena. Tendrías que hacer algo como
echo "YOURQUERYSTRINGHERE">tmpfile
mysql --host=localhost --user=user --password=password dbname <tmpfile
sugerencia de ken de
mysql --host=localhost --user=user --password=password -e "QUERY" dbname
puede funcionar, pero si intenta usar variables bash en su consulta, puede fallar en la expansión de parámetros. por ejemplo
QUERY="select * from $MYTABLE WHERE name=\"[email protected]\";"
mysql --host=localhost --user=user --password=password -e "$QUERY" mydbname
puede que no haga lo que espera. Una opción es usar
echo "$QUERY"|mysql --host=localhost --user=user --password=password mydbname
que funciona si la cadena de consulta contiene citas apropiadas. Otra opción es el documento "aquí" como lo sugiere dogbane.
Intente usar un documento aquí como este:
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
Alternativamente, coloque todos sus comandos en un archivo de texto y ejecútelo:
mysql --host=localhost --user=user --password=password < commands.sql
Prueba así:
echo "select 1" | mysql
mysql --batch --silent -e 'SHOW TABLES';
Lote y silencioso son útiles si planea canalizar la salida