我正在从我的 shell 脚本调用应用程序,该脚本按顺序执行多个重要步骤,其中一个步骤如下:
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 shell 的东西?
答案1
数据流主要有三种:输入、输出和错误。
Stdin 是输入
Stdout 是输出
Stderr 是错误
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/