Сохраните вывод запроса mysql в переменную оболочки

Чтобы добавить к Вороне @David, вот dependency:tree пример от сайта Знатока:

mvn dependency:tree -Dincludes=velocity:velocity

мог бы произвести

[INFO] [dependency:tree]
[INFO] org.apache.maven.plugins:maven-dependency-plugin:maven-plugin:2.0-alpha-5-SNAPSHOT
[INFO] \- org.apache.maven.doxia:doxia-site-renderer:jar:1.0-alpha-8:compile
[INFO]    \- org.codehaus.plexus:plexus-velocity:jar:1.1.3:compile
[INFO]       \- velocity:velocity:jar:1.4:compile

36
задан codeforester 27 November 2018 в 01:06
поделиться

4 ответа

Я мало что знаю об интерфейсе командной строки MySQL, но, предполагая, что вам нужна только помощь с bash, вы должны попробовать поменять местами команды примерно так:

myvariable=$(echo "SELECT A, B, C FROM table_a" | mysql database -u $user -p$password)

строку в MySQL. Или вы можете проявить больше фантазии и использовать некоторые новые функции bash (строка здесь)

myvariable=$(mysql database -u $user -p$password<<<"SELECT A, B, C FROM table_a")

, что приведет к тому же (при условии, что вы используете достаточно свежую версию bash), без использования echo.

Обратите внимание, что -p $ password не является опечаткой, но MySQL ожидает, что пароли будут вводиться через командную строку (без пробелов между параметром и значением).

Обратите внимание, что myvariable будет содержать все, что MySQL выводит на стандартном выходе. (обычно все, кроме сообщений об ошибках), включая любые заголовки столбцов, фреймы ASCII-art и так далее, что может быть или не быть тем, что вам нужно.

РЕДАКТИРОВАТЬ:

44
ответ дан 27 November 2019 в 05:09
поделиться

Чтобы прочитать данные построчно в массив Bash, вы можете сделать это:

while read -a row
do
    echo "..${row[0]}..${row[1]}..${row[2]}.."
done < <(echo "SELECT A, B, C FROM table_a" | mysql database -u $user -p $password)

Или в отдельные переменные:

while read a b c
do
    echo "..${a}..${b}..${c}.."
done < <(echo "SELECT A, B, C FROM table_a" | mysql database -u $user -p $password)
15
ответ дан 27 November 2019 в 05:09
поделиться

Более прямой способ:

myvar=$(mysql mydatabase -u $user -p$password -se "SELECT a, b, c FROM table_a")
61
ответ дан 27 November 2019 в 05:09
поделиться

У вас есть канал наоборот, и вам нужно повторить запрос, например:

myvariable=$(echo "SELECT A, B, C FROM table_a" | mysql db -u $user -p $password)

Другой альтернативой является использование только клиента mysql, например

myvariable=$(mysql db -u $user -p $password -se "SELECT A, B, C FROM table_a")

( -s требуется, чтобы избежать ASCII-арта)

Теперь BASH - не самый подходящий язык для обработки сценариев этого типа, особенно для обработки строк и разделения результатов SQL и т.п. Вы должны много работать, чтобы получить что-то, что было бы очень, очень просто на Perl, Python или PHP.

Например, как вы получите каждый из A, B и C по отдельной переменной? Это, конечно, выполнимо, но если вы не понимаете конвейеры и эхо (очень простые вещи оболочки), это будет непростая задача для вас, поэтому, если это вообще возможно, я бы использовал более подходящий язык.

12
ответ дан 27 November 2019 в 05:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: