下面是我的bash shell脚本代码,在这里我想捕获if子句的错误消息,当它表示作业已经在运行或无法将作业启动到变量时,如何在下面的脚本中实现,或以下功能的任何其他方式
if initctl start $i ; then echo "service $i started by script" else echo "not able to start service $i" fi
答案 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