如何在if块的变量中捕获命令错误消息

时间:2014-08-14 08:56:16

标签: linux bash shell

下面是我的bash shell脚本代码,在这里我想捕获if子句的错误消息,当它表示作业已经在运行或无法将作业启动到变量时,如何在下面的脚本中实现,或以下功能的任何其他方式

if initctl start $i  ; then
    echo "service $i  started by script"
else
    echo "not able to start service $i"
fi

2 个答案:

答案 0 :(得分:7)

例如,在将stdout重定向到/ dev / null之后,您可以使用语法msg=$(command 2>&1 1>/dev/null)将stderr重定向到stdout。这样,它只会存储stderr:

error=$(initctl start $i 2>&1 1>/dev/null)
if [ $? -eq 0 ]; then
   echo "service $i started by script"
else
   echo "service $i could not be started. Error: $error"
fi

这使用How to pipe stderr, and not stdout?,以便从initctl start $i抓取stderr并存储在$error变量中。

然后,$?包含命令的返回码,如How to check if a command succeeded?中所示。如果0,它成功了;否则,发生了一些错误。

答案 1 :(得分:2)

使用' $?'变量 它存储前一个语句中的任何exit_code 有关详细信息,请参阅http://www.tldp.org/LDP/abs/html/exitcodes.html

initctl start $i
retval=$?
if [ $retval -eq 0 ]; then
    echo "service $i  started by script"
else
    echo "not able to start service $i"
fi