仅当日志包含错误时才重定向linux bash脚本

sg2wtvxw  于 2021-06-28  发布在  Hive
关注(0)|答案(2)|浏览(461)

我对linux bash脚本和学习还很陌生。我只是想知道,只有当stderr包含错误时,才有可能将stderr重定向到一个文件。
我正在执行hadoop配置单元命令,并将其放入bash脚本文件中,以安排进程。hive命令生成大量日志,我不想每次都将日志重定向到文件,但是如果日志包含错误,那么我想将日志重定向到文件并将错误文件发送给其他人。
请让我知道如何做到这一点。提前谢谢。。
你好,杰娃

pcww981p

pcww981p1#

必须使用stderr文件描述符,即2
例如:

rm this-file-does-not-exist.txt 
>>>> rm: cannot remove ‘asdfasf.js’: No such file or directory

# to redirect that error to a file you do this

rm this-file-does-not-exist.txt 2>/tmp/logError.txt
cat /tmp/logError.txt
>>>> rm: cannot remove ‘asdfasf.js’: No such file or directory

# if you want to check if the output contains `ERROR` do this

badcommand | grep "ERROR" 1>/tmp/logError.txt # if greping for "ERROR" was successfull redirect stdout to /tmp/logError.txt

# the 1 is a file descriptor for stdout

如何使用linux邮件命令

ccgok5k5

ccgok5k52#

如果我理解正确,如果发生错误,您希望在文件中保留整个错误日志(包括可能与错误检测模式不匹配的行)。我不认为有任何方法可以完全通过i/o重定向来实现您想要的。
相反,您可以无条件地将stderr重定向到它自己的文件。然后,作为一个后处理步骤,您可以grep浏览该文件以查看是否出现错误,并且根据结果,可以将该文件邮寄给其他人,也可以将其删除。

相关问题