如何在Bash中从返回码中提取位
我正在使用pylint工具,它会返回一些错误代码:
Pylint should leave with following status code:
* 0 if everything went fine
* 1 if a fatal message was issued
* 2 if an error message was issued
* 4 if a warning message was issued
* 8 if a refactor message was issued
* 16 if a convention message was issued
* 32 on usage error
status 1 to 16 will be bit-ORed so you can know which different
categories has been issued by analysing pylint output status code
现在我需要在Bash中判断是否出现了致命错误或普通错误。该怎么做呢?我想我需要用到位运算来实现这个功能 ;-)
编辑:我知道我需要用位与运算符和数字三(3)进行运算,然后检查结果是否为零,以确定是否出现了致命错误或普通错误。我的问题很简单:在bash中怎么写这个语法。输入是$?,输出也是$?(比如使用测试程序)。谢谢!
7 个回答
2
如果状态码是奇数,也就是说最后一位是1,就会发出一个致命消息。
如果状态码的第二位是1,就会发出一个错误消息。
所以你需要检查最后两位是否都是1;换句话说,就是要检查你的状态码和0b11
进行按位与运算的结果是否是3。
3
明白了!
[ $(($NUMBER & 3)) -ne 0 ] && echo Fatal error or error was issued
谢谢!
6
在Bash中,你可以使用双括号:
#fatal error
errorcode=7
(( res = errorcode & 3 ))
[[ $res != 0 ]] && echo "Fatal Error"