다른 명령이 이미 출력을 생성한 경우에만 출력을 생성합니다.

다른 명령이 이미 출력을 생성한 경우에만 출력을 생성합니다.

이 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

참고: 이중 대괄호 [[]]와 간단한 비교 연산자(예: ==) 를 사용하세요.

관련 정보