Все таблицы MySQL с исключением через Bash - PullRequest
2 голосов
/ 10 февраля 2012

(извините за мой плохой английский)

Я хочу выбрать все имена таблиц в моей базе данных MySQL, но исключить 2 таблицы, а затем работать с этими данными в bash ...

НО Когда я пробую этот код, возникает проблема побега, я думаю, есть ли другая возможность выполнить запрос и перехватить его вывод в переменной DBS?

#/bin/bash
MYSQL_USER=root
MYSQL_PASS=toor

DBS="$(mysql -u$MYSQL_USER -p$MYSQL_PASS -Bse 'SELECT SCHEMA_NAME AS Database FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME NOT IN('mysql', 'information_schema');')"

Ответы [ 2 ]

3 голосов
/ 10 февраля 2012

Попробуйте сохранить строку SQL в своей собственной переменной и отобразить ее в клиенте mysql:

#/bin/bash
MYSQL_USER=root
MYSQL_PASS=toor

SQL_STRING="SELECT SCHEMA_NAME AS db FROM information_schema.SCHEMATA WHERE SCHEMA_NAME NOT IN ('mysql', 'information_schema');"
# Pipe the SQL into mysql
DBS=$(echo $SQL_STRING | mysql -u$MYSQL_USER -p$MYSQL_PASS -Bs)

# Display your result
echo $DBS

Обратите внимание, я также изменил AS Database на AS db, поскольку DATABASE является MySQLзарезервированное ключевое слово, которое должно быть заключено в кавычки.Я не хотел возиться с тем, чтобы в Bash должным образом избежать их. Просто проще использовать другой псевдоним.

0 голосов
/ 10 февраля 2012

Вы не можете вставлять одинарные кавычки в одну строку в кавычках.Попробуйте:

DBS="$(mysql -u$MYSQL_USER -p$MYSQL_PASS -Bse "SELECT SCHEMA_NAME AS Database FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME NOT IN('mysql', 'information_schema');")"

«Внутренние» двойные кавычки в порядке, потому что в скобках указан новый подоболочек.

...