他のコマンドがすでに出力を生成している場合にのみ出力を生成します。

他のコマンドがすでに出力を生成している場合にのみ出力を生成します。

この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

注:二重角括弧[[]]と単純な比較演算子(例==:)を使用してください。

関連情報