Shell 脚本检测脚本调用的命令中的错误

Shell 脚本检测脚本调用的命令中的错误

我正在从我的 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/

相关内容