可能であればメッセージEnter your $root password
を使用して、コマンドラインから動的にパスワードを入力するように求められるmysqlスクリプトを実行したいと思います。ただし、期待どおりに機能しません。これまでのところ
mysql -u root -p CREATE DATABASE IF NOT EXISTS Test
さらに、データベースが作成されたときにmysqlからログアウトしてbashコマンドに戻る方法は?
mysql -u root -p --execute="SELECT User, Host FROM mysql.user"
パスワードの入力を求め、指定されたコマンドを実行し、シェルに戻ります(ログアウトは不要です)。
代わりに独自のプロンプトが必要な場合は、スクリプトを作成する必要があります。
#!/usr/bin/env bash
echo "Enter pwd"
read pwd
mysql -u root -p$pwd --execute="SELECT User, Host FROM mysql.user"
mysql
は-p
をデータベースの名前と見なすため、$pwd
と$pwd
の間にスペースがあってはならないことに注意してください。
mysql -p
が代わりにアスタリスクを表示するのに対し、端末ではパスワードがクリアテキストで表示されるため、お勧めしません。
MySQLクエリのスクリプトは、いくつかの方法で実行できます。 PerlDuckの答え は既に-e
または--execute
パラメーターに触れています。別の方法は、MySQL自体からsource
コマンドを使用してSQLスクリプトを実行することです。
$ mysql -u root -p -e 'source foo.sql'
Enter password:
+------+-------------+
| a | b |
+------+-------------+
| 1 | hello world |
+------+-------------+
$ cat foo.sql
use foo_db;
SELECT * FROM foo_tb;
別の方法は、スクリプトをmysql
のstdin
にリダイレクトすることです。
$ Sudo mysql -u root -p < foo.sql
Enter password:
a b
1 hello world
それぞれの場合のフォーマットの違いに注意してください。もちろん、 here-docまたはherestring を使用して同じ結果を達成することもできますが、テキストファイルを使用すると長いクエリを実行できますが、here-docsとhere-stringsは中程度の短いステートメントに便利です。