我有很多代码行的bash脚本,我需要在返回$时运行它? == 0,但如果有错误,我需要停止它并退出代码1?
问题是如何做到这一点?
我尝试使用set -e
命令,但Jenkins并没有将构建标记为失败,因为它看起来像成功
我还需要获取错误消息以在我的Jenkins日志中显示它
我设法得到错误代码(在我的情况下它将是126),但如何获取错误消息?
main file
fileWithError.sh
rc=$?; if [[ $rc != 0 ]]; then
echo "exit {$rc} ";
fi
fileWithError.sh
#!/bin/sh
set -e
echo "Test"
agjfsjgfshgd
echo "Test2"
echo "Test3"
答案 0 :(得分:1)
只需将命令set -e
添加到文件的开头
这应该与此类似
#!/bin/sh
set -e
#...Your code...
答案 1 :(得分:1)
我想你只是想:
#!/bin/sh
while fileWithError.sh; do
sleep 1;
done
echo fileWithError.sh failed!! >&2
请注意,如果脚本编写得很好,那么回显就是 冗余为fileWithError.sh应该写得体面 错误信息已经。此外,可能不需要睡眠,但如果脚本快速成功,则可以防止快速循环。
您可以获得显式返回值,但需要进行一些重构。
#!/bin/sh
true
while test $? = 0; do fileWithError.sh; done
echo fileWithError.sh failed with status $?!! >&2
因为while脚本的返回值将是 在第一次施工时返回睡眠值。
答案 2 :(得分:0)
仅获取错误代码并不容易。 怎么样......
#!/bin/bash
Msg=$(fileWithError.sh 2>&1) # redirect all error messages to stdout
if [ "$?" -ne 0 ] # Not Equal
then
echo "$Msg"
exit 1
fi
exit 0
您捕获fileWithError.sh
创建的所有消息,如果程序返回错误代码,那么您已将错误消息保存在变量中。
但这会造成不利,因为您会临时存储fileWithError.sh
创建的所有邮件,直到出现错误。
您可以使用echo "$Msg" |tail -n 1
过滤错误消息,但不是100%保存。
您还应该在fileWithError.sh
...中进行一些更改
使用set -e
切换trap "exit 1" ERR
。这将关闭错误的脚本。
希望这会有所帮助。