仅当其他命令已生成输出时才生成输出

仅当其他命令已生成输出时才生成输出

在此 bash 脚本中,我更新所有 Nextcloud docker 实例内的所有应用程序:

#!/bin/bash
ALL_NC="next1.mycloud.com next2.mycloud.com next3.mycloud.com"
for i in $ALL_NC; do
  DOCKERIMAGE="${i//.}_app_1";
  # TODO: echo this only if something happens
  # echo "check $DOCKERIMAGE"
  for a in $(docker exec --user www-data ${DOCKERIMAGE} php occ app:list|grep Disabled -B999|grep -- -|cut -d" " -f4|cut -d: -f1|xargs); do
    docker exec --user www-data ${DOCKERIMAGE} php occ app:update $a
  done
done
exit 0

这会创建类似的输出

news new version available: 14.2.2
news updated
news new version available: 14.2.2
news updated
news new version available: 14.2.2
news updated

cron如果脚本生成任何输出,则调用此函数会自动将邮件发送给 root。

如何激活仅在更新内容时才应回显的行?

答案1

您可以将代码的任何部分放入其中$(...)以捕获输出,而不是将其写入标准输出。

例如:

OUT="$(
  for i in 1 2 3; do
    echo "updated $i"
  done
)"
if [[ "$OUT" == *"updated"* ]]; then
  echo "$OUT"
fi

注意:使用双方括号[[]]和简单比较运算符(即==

相关内容