我正在使用一个简单的bash函数来执行dbus命令并检索其结果。
getValue()
{
local -i val
declare -a array
array=($(dbus-send --system --print-reply ...))
val=${array[7]}
echo $val
unset array
if [ ! -z ${val} ]
then
...
fi
}
当dbus命令返回预期值时,该功能正常工作。但是,当dbus处于不良状态时:
Error org.freedesktop.DBus.Error.NoReply: Did not receive a reply. Possible causes include: ...
“echo $ val”返回0,条件是[! -z“$ val”]满意。如何避免这种错误的状态?
答案 0 :(得分:1)
假设当产生错误时,dbus
的退出状态为非零(失败),您可以添加另一个检查:
array=($(dbus-send --system --print-reply ...))
val=${array[7]}
if [ $? -eq 0 ] && [ -n "$val" ]
$?
包含要执行的最后一个命令的返回码(在本例中为dbus
),通常0
表示成功。我将您的条件更改为-n
以检查非空和引用$val
,因为它通常被认为是良好做法。您使用的花括号不提供任何防止全局扩展的保护,例如如果$val
包含*
。
答案 1 :(得分:0)
您可以重定向命令的标准错误以加入标准输出,例如,
def replace(source, indexA, indexB):
newList = source[:indexA[0]] + source[indexB[0]:indexB[1]]
newList += source[indexA[1]:indexB[0]] + source[indexA[0]:indexA[1]]
newList += source[indexB[1]:]
return newList
myList = replace(myList, [2,4], [7,10])