Důvod, proč váš pokus nefungoval, byl <
očekává název souboru a vy jste mu dodali řetězec. Museli byste udělat něco jako
echo "YOURQUERYSTRINGHERE">tmpfile
mysql --host=localhost --user=user --password=password dbname <tmpfile
Kenův návrh
mysql --host=localhost --user=user --password=password -e "QUERY" dbname
může fungovat, ale pokud se pokusíte ve svém dotazu použít proměnné bash, můžete se dostat do rozporu s rozšířením parametrů. např.
QUERY="select * from $MYTABLE WHERE name=\"[email protected]\";"
mysql --host=localhost --user=user --password=password -e "$QUERY" mydbname
nemusí dělat to, co očekáváte. Jednou z možností je použití
echo "$QUERY"|mysql --host=localhost --user=user --password=password mydbname
který funguje, pokud řetězec dotazu obsahuje příslušné citace. Další možností je dokument „zde“, jak navrhuje dogbane.
Zkuste použít dokument zde:
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
Případně umístěte všechny příkazy do textového souboru a spusťte jej:
mysql --host=localhost --user=user --password=password < commands.sql
Zkuste to takto:
echo "select 1" | mysql
mysql --batch --silent -e 'SHOW TABLES';
Dávkové a tiché jsou užitečné, pokud plánujete výstup pomocí potrubí