あなたの試みがうまくいかなかった理由は、 <
ファイル名が必要で、文字列を与えました。あなたは次のようなことをしなければならないでしょう
echo "YOURQUERYSTRINGHERE">tmpfile
mysql --host=localhost --user=user --password=password dbname <tmpfile
ケンの提案
mysql --host=localhost --user=user --password=password -e "QUERY" dbname
動作しますが、クエリで bash 変数を使用しようとすると、パラメーター展開に違反する可能性があります。例
QUERY="select * from $MYTABLE WHERE name=\"[email protected]\";"
mysql --host=localhost --user=user --password=password -e "$QUERY" mydbname
期待どおりに動作しない可能性があります。1 つのオプションは使用です
echo "$QUERY"|mysql --host=localhost --user=user --password=password mydbname
これは、クエリ文字列に適切な引用符が含まれている場合に機能します。もう 1 つのオプションは、dogbane が提案する「here」ドキュメントです。
次のようなヒア ドキュメントを使用してみてください:
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
または、すべてのコマンドをテキスト ファイルに配置して実行します。
mysql --host=localhost --user=user --password=password < commands.sql
このようにしてみてください:
echo "select 1" | mysql
mysql --batch --silent -e 'SHOW TABLES';
出力をパイプする予定がある場合は、バッチとサイレントが便利です