1

Я вызываю приложения из своего сценария оболочки, который последовательно выполняет ряд важных шагов, один из которых приведен ниже:

for database in $( 
        echo 'show databases;' | 
        mysql --defaults-extra-file=/etc/sqlbackup/my.cnf \
              -e 'show databases' -s --skip-column-names|
        grep -vi information_schema )
do
  echo $database
done
exit 0

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

Мой вопрос заключается в том, что произойдет, если приложение (любая командная строка, вызванная из сценария) не сможет подключиться и выдало ошибку, такую как:

`ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)`?

Сообщается ли об ошибках в отдельной переменной среды за пределами вывода строки, если да, то как я могу это обнаружить? Как изменить путь сценария в зависимости от успеха или неудачи?

Я - программист .Net, и лучшая аналогия, которую я могу сделать, - это когда выдается и обрабатывается исключение:

catch (Exception e)
{
  // log the reason here: echo "error running database command: " + e.Description
}

Есть ли что-то похожее на вышеперечисленное, но только для оболочек borne/bash?

1 ответ1

3

Существует три основных потока данных: ввод, вывод и ошибка.

  • Ввод ввода

  • Стандартный вывод

  • Стдерр это ошибка

Вы можете перенаправить сообщения об ошибках, добавив этот 2>file.log в конце вашей команды.

Это приведет к записи ошибок в файл журнала, которые вы, в свою очередь, сможете прочитать с tailf file.log - на отдельном экране, если хотите.

$( echo 'show databases;' | /usr/bin/mysql --defaults-extra-file=/etc/sqlbackup/my.cnf -e 'show databases' -s --skip-column-names 2>>file.log |grep -vi information_schema )

Если вам нужно больше информации, посмотрите здесь: http://www.cyberciti.biz/faq/redirecting-stderr-to-stdout/

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .