如何在返回代码0时运行bash脚本?

时间:2017-04-05 15:39:28

标签: linux bash ubuntu jenkins

我有很多代码行的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"

3 个答案:

答案 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。这将关闭错误的脚本。

希望这会有所帮助。