一种在 bash 中的一系列脚本命令中重定向 stderr 并获取失败脚本名称的方法?
A way to redirect stderr AND get name of the failed script in a series of script commands in bash?
我正在设置一个电子邮件通知系统,我想在其中将失败的命令(编辑:失败的脚本)保存在一个 .txt 文件中,每天一次我有一个 python 脚本来发送一封电子邮件包含所有失败的作业。
目前看起来像:
script1.py && script2.py && ... && scriptN.py 2>> "/home/mydir/failedscripts.txt" 或
script1.sh && script2.sh arg1 && .. && scriptN.sh 2>> "/home/mydir/failedscripts.txt"
一些脚本接受参数。它似乎与 stderr 的重定向一起工作正常,但我还需要将失败脚本的名称 + 字符串“DONE”传递到“failedscripts.txt”中。
我失败的尝试:
script1 && script2 && .. && scriptN 2>> "/home/mydir/failedscripts.txt" || echo $_,"完成">> "/home/mydir/failedscripts.txt"
script1 && script2 && .. && scriptN 2>> "/home/mydir/failedscripts.txt" ; echo $_,"完成">> "/home/mydir/failedscripts.txt"
script1 && script2 && .. && scriptN 2>> "/home/mydir/failedscripts.txt" && echo $_,"done">> "/home/mydir/failedscripts.txt"
但这肯定只是将“failedscripts.txt,done”传送到我的 failedscripts.txt...
这里有一种方法,它不能准确给出您想要的输出格式,但可以通过编写每个已执行的 脚本 来指示失败的脚本 ] 到文件,这样 DONE 之前的最后一个就是失败的:
(set -x; script1 && script2 && … && scriptN) 2>/tmp/$$ || (cat /tmp/$$; echo DONE) >>/home/mydir/failedscripts.txt; rm /tmp/$$
我正在设置一个电子邮件通知系统,我想在其中将失败的命令(编辑:失败的脚本)保存在一个 .txt 文件中,每天一次我有一个 python 脚本来发送一封电子邮件包含所有失败的作业。
目前看起来像: script1.py && script2.py && ... && scriptN.py 2>> "/home/mydir/failedscripts.txt" 或 script1.sh && script2.sh arg1 && .. && scriptN.sh 2>> "/home/mydir/failedscripts.txt"
一些脚本接受参数。它似乎与 stderr 的重定向一起工作正常,但我还需要将失败脚本的名称 + 字符串“DONE”传递到“failedscripts.txt”中。
我失败的尝试:
script1 && script2 && .. && scriptN 2>> "/home/mydir/failedscripts.txt" || echo $_,"完成">> "/home/mydir/failedscripts.txt"
script1 && script2 && .. && scriptN 2>> "/home/mydir/failedscripts.txt" ; echo $_,"完成">> "/home/mydir/failedscripts.txt"
script1 && script2 && .. && scriptN 2>> "/home/mydir/failedscripts.txt" && echo $_,"done">> "/home/mydir/failedscripts.txt"
但这肯定只是将“failedscripts.txt,done”传送到我的 failedscripts.txt...
这里有一种方法,它不能准确给出您想要的输出格式,但可以通过编写每个已执行的 脚本 来指示失败的脚本 ] 到文件,这样 DONE 之前的最后一个就是失败的:
(set -x; script1 && script2 && … && scriptN) 2>/tmp/$$ || (cat /tmp/$$; echo DONE) >>/home/mydir/failedscripts.txt; rm /tmp/$$