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

aga*_*era 3 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

fed*_*qui 7

例如,您可以msg=$(command 2>&1 1>/dev/null)在将stdout重定向到/ 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
Run Code Online (Sandbox Code Playgroud)

这使用如何管道stderr,而不是stdout?,以便它从变量中捕获stderr initctl start $i并存储$error.

然后,$?包含命令的返回码,如何检查命令是否成功?.如果0,它成功了; 否则,发生了一些错误.