如何在Bash中从返回码中提取位

7 投票
7 回答
2731 浏览
提问于 2025-04-16 21:06

我正在使用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"

撰写回答