Получить MySQL Cell в сценарии оболочки - PullRequest
3 голосов
/ 28 августа 2009

Я хотел бы выполнить команду MySQL в задании shell / cron, которое возвращает динамическое число строк, в которых я могу получить доступ к определенному полю из этих строк. Затем я хотел бы выполнить эту дополнительную команду для ввода этих полей.

Мои два вопроса:

  1. Как вернуть набор строк (в идеале просто одну ячейку в каждой строке) в переменную сценария оболочки?

  2. Могу ли я написать скрипт PHP, который возвращает необходимую мне информацию, а затем сохранить ее в переменной сценария оболочки? Если да, то как мне запустить скрипт PHP из оболочки и заставить его вернуть информацию?

Ответы [ 4 ]

4 голосов
/ 28 августа 2009
echo 'select some_column from some_table' | mysql -uusername -ppassword some_db | tail -n+2

Несколько важных вещей, на которые стоит обратить внимание:

  1. Между -p и паролем не должно быть пробела. Если это так, он предполагает, что вы не указали пароль, и запрашивает его в интерактивном режиме. Осторожно: некоторые операционные системы позволяют другим пользователям видеть полную командную строку для команд, выполняемых другими пользователями, поэтому -ppassword представляет угрозу безопасности. Делайте это только на тех компьютерах, на которых все пользователи могут войти в систему, или на операционных системах, которые предотвращают такой вид отслеживания, таких как FreeBSD.

  2. Вызов «tail» игнорирует первую строку вывода, которая является именем столбца. Результаты начинаются со второй строки, таким образом, + 2.

  3. Бит «считать строки» аналогичен, за исключением того, что вместо этого вы говорите «выберите количество (*) из некоторой_таблицы»

1 голос
/ 28 августа 2009

Вы также можете сделать что-то подобное, если вам нужно сохранить все это в bash:

mysql -b -e "SELECT one_column FROM tables" | {
  read
  while [ ! -z "$REPLY" ]
  do
    # do something useful with the $REPLY variable here
    read
  done
}

(уверен, что есть более эффективный способ сделать это)

Другой вариант, использующий xargs:

mysql -b -e "SELECT one_column FROM tables" | xargs usefulcommand

, где Полезная команда использует встроенную функцию shift для обработки всех своих аргументов командной строки.

1 голос
/ 28 августа 2009

Разве вы не можете просто использовать PHP вместо сценария оболочки? Просто запустите /path/to/php mycron.php в вашем cronjob вместо шеллскрипта.

0 голосов
/ 28 августа 2009

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

Это не сценарий оболочки, но вы можете вызвать его из сценария оболочки, синтаксис очень прост, и в сети есть много примеров того, как использовать ожидаемый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...