この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
スクリプトが出力を生成する場合、この関数を呼び出すと自動的にメールがルートに送信されます。
コンテンツが更新されたときにのみエコーする必要がある行を有効にするにはどうすればよいですか?
答え1
$(...)
標準出力に書き込むのではなく、出力をキャプチャするためにコードの一部をここに配置できます。
たとえば、
OUT="$(
for i in 1 2 3; do
echo "updated $i"
done
)"
if [[ "$OUT" == *"updated"* ]]; then
echo "$OUT"
fi
注:二重角括弧[[]]
と単純な比較演算子(例==
:)を使用してください。