Перенаправление stdout на mysql в bash

0

Я могу выполнить mysql в файле следующим образом.

mysql -u username -p < some_file

В сценарии bash у меня есть функция, которая выводит эхо-результат, который я хочу передать в ту же команду в сценарии bash.

some_function() {
    echo "Some SQL"
}

Как передать вывод в mysql с помощью pipe/redirection?

Я пробовал следующее, но он не работает без такого файла или каталога. Как я могу использовать вывод функции здесь.

mysql -u username -p < some_function
  • 0
    Используйте оператор трубы: some_function | mysql -u username -p .
  • 0
    @ Амадан, это именно то, что я хотел, спасибо.
Показать ещё 7 комментариев
Теги:
io-redirection
pipe

1 ответ

0

Нет необходимости использовать канал или перенаправление в этом случае, вы можете использовать непосредственно -e для выполнения некоторых команд SQL:

mysql -u username -p -e "SQL/MySQL commands"

Пример конкретной базы данных:

mysql -u username -p -e "use database_name; SHOW tables"
mysql -u username -p -e "SHOW tables" database_name

И вы также можете поймать вывод команды или функции и передать ее как аргумент следующим образом:

sql_command="$(your_function)"
mysql -u username -p -e "${sql_command}" database_name;

Если вы действительно хотите использовать канал или перенаправление (но я думаю, что в этом нет смысла):

$ mysql -u root -p database_name < <(echo "SHOW TABLES") # redirection
$ mysql -u root -p database_name <<< "$(echo "SHOW TABLES")" # another way to use redirection
$ echo "SHOW TABLES"|mysql -u root -p database_name # pipe
  • 0
    Спасибо за это, но я пытался сделать это, используя стандартный вывод, созданный функцией, а не строку, которую я уже знаю.
  • 0
    @ user3130010 Это не дает оснований не использовать опцию -e . Вы можете перехватить вывод вашей функции и передать его в качестве аргумента, например, sql_command="$(your_function)"; mysql -u username -p -e "${sql_command}" database_name;
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню