Я хотел бы выполнить mysql сценарий, где пользователя просят ввести пароль динамично из командной строки, если это возможно, с сообщением Enter your $root password
. Однако это не работает как ожидалось. До сих пор я имею
mysql -u root -p CREATE DATABASE IF NOT EXISTS Test
кроме того, когда дб создается, как выйти из системы от mysql и возвратиться для избиения команд?
Согласно документам
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"
Обратите внимание на то, что не должно быть никакого пространства между -p
и $pwd
потому что mysql
затем рассматривает $pwd
быть именем базы данных.
Я не рекомендовал бы это, потому что пароль затем показывают в открытом тексте в терминале тогда как mysql -p
выставочные звездочки вместо этого.
Сценарии запросов MySQL могут быть сделаны несколькими способами. Ответ PerlDuck уже затрагивает -e
или --execute
параметр. Иначе должен был бы использовать source
команда от самого MySQL для запущения скрипта 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
Отметьте различие в форматировании в каждом случае. Конечно, можно также использовать здесь-документ или herestring для достижения тех же результатов, хотя использование текстового файла позволяет выполнять долгие запросы, в то время как здесь-документы и здесь-строки более полезны для умеренно кратких заявлений.