Я вызываю приложения из своего сценария оболочки, который последовательно выполняет ряд важных шагов, один из которых приведен ниже:
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?
Ответы:
Существует три основных потока данных: ввод, вывод и ошибка.
Ввод ввода
Стандартный вывод
Стдерр это ошибка
Вы можете перенаправить сообщения об ошибках, добавив это
2>file.log
в конце вашей команды.Это будет записывать ошибки в файл журнала, который вы могли бы прочитать с
tailf file.log
- на отдельном экране, если хотите.Если вам нужно больше деталей, посмотрите здесь: http://www.cyberciti.biz/faq/redirecting-stderr-to-stdout/
источник
$?
проверить код выхода последней команды. Смотрите пример здесь: blog.yimingliu.com/2009/01/01/...