在工作中,我们常会使用tee命令搭配管道符,将输出的结果添加到log日志中,别问我为什么一定要使用tee搭配管道符,因为我想把输出结果打印到屏幕上的同时,还将输出结果写入log日志中啦!
但有时会遇到一个很尴尬的问题,就是:
一般我们会这么写:
mysql -userbuser -ppasswd | tee -a serb.log
完了之后再根据$?去打印相应的日志到serb.log中,比如弱若$?为0,则打印success;若$?为非0,则打印failed到日志。
此时就有问题啦!因为我们发现无论mysql -userbuser -ppasswd这条指令是否执行成功,$?都是0,而我们的目的是如果这条指令执行成功,则打印success否则打印failed,这不就和我们的诉求相违背了嘛。
其实原因仔细看之后会发现,因为我们使用了tee命令加管道符,这种情况下无论mysql -userbuser -ppasswd这条指令是否成功,整条指令返回结果都会是0!
那知道了问题之后,肯定就有解决办法啦!最简单的就是重定向啦,将标准输出和错误输出全部重定向到log日志中!即改成这样:
mysql -userbuser -ppasswd 1>> serb.log 2>&1
而此时我们需要注意的是,管道符这个东西,如果管道符之后的命令执行时成功的,那么无论之前的指令成功与否,整条指令的结果都是成功,也就是说$?都是0