在此 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
注意:使用双方括号[[]]
和简单比较运算符(即==
)