在每个命令之后,如果成功:显示自定义消息,如果错误:显示错误,并发送到文件

时间:2016-11-16 01:42:31

标签: linux bash

bash脚本执行几个命令。 在每个命令之后,如何:

  • 如果成功:在控制台中显示自定义消息并将其附加到日志文件
  • 如果错误:在控制台中显示错误消息,将错误消息附加到日志文件并恢复整个脚本

我就在这里:

log_file="log.txt"
output() {
  echo $@
  echo $@ 2>&1 >> $log_file;
  if [ $@ -eq 0 ]
  then
    exit 1
  fi
}

然后在每个命令之后:

if [ $? -eq 0 ] 
then 
  output "Custom message"
else
  output $?
fi

这会重复很多......

3 个答案:

答案 0 :(得分:1)

您可以创建"运行"限制重复的功能:

run()
{
  message="$1"
  shift
  eval "$*"
  if [ $? -eq 0 ]; then
    output "$message"
  else
    output $?
  fi
 }

只需在每个命令前加上:

 run "message" "command"

如果命令包含shell元表达式,则只需要引用该命令。

答案 1 :(得分:0)

以下命令将为您提供上次运行命令的退出状态。

  

$?

例如,假设您执行了" ls"命令,之后如果执行以下

  

echo $?

您将看到退出状态为0.这意味着成功。非零退出状态表示失败。

您可以在shell脚本中的某种if else中使用它,并根据退出值执行您需要执行的操作。

答案 2 :(得分:0)

这是实现这一目标的一种方式;在每个要跟踪的命令之后,添加以下行:

rc="$?"; if [ "$rc" -eq 0 ]; then echo "Custom message" 2>&1 | tee -a /folder/log; else echo "$rc" 2>&1 | tee -a /folder/log; fi