stdout에서 stderr로 몇 줄을 복사합니다. 단, stderr이 stdout과 다른 경우에만 해당됩니다.

stdout에서 stderr로 몇 줄을 복사합니다. 단, stderr이 stdout과 다른 경우에만 해당됩니다.

백업 중에 전송된 모든 파일을 포함하여 모든 것을 표준 출력으로 인쇄하는 bash 스크립트 "backup.sh"가 있습니다.

전체 출력을 유지하고 싶지만 호출될 때

./backup.sh 2>stderr.log

, 그런 다음 stdout에서 stderr.log로 몇 가지 중요한 줄을 복사하면 됩니다.

내 스크립트는 현재 다음 함수를 사용하여 이러한 중요한 줄을 인쇄합니다.

errEcho() {
    echo "$1"
    echo "$1" 1>&2
}

echo "Some info message"
errEcho "Very important message"

하지만 이제 누군가가 단순히 스크립트를 호출하면

./backup.sh

그런 다음 errEcho 행이 표준 출력에 복제됩니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? (실제로 stdout == stderr인 경우 스크립트가 인식하고 출력을 stderr로 건너뛰기를 원하지만 매우 다른 접근 방식이 필요한지 확실하지 않습니다.)

참고: 저는 두 개의 스크립트를 갖고 싶지 않습니다. 그 중 하나는 "backup.sh 2>stderr.log"를 호출합니다.

답변1

당신은 분명히 과도한 엔지니어링을 하고 있습니다.

메시지 라인 인쇄오직그리고 stdout오류 메시지오직도착하다 stderr. 문제가 해결되었습니다.

콘솔에서 스크립트를 실행하고 정보 메시지를 숨기려면 >/dev/null리디렉션을 사용하세요. 이렇게 하면 오류 줄만 표시됩니다.

답변2

errEcho () {
  echo 1>&2 "$@"
}

모든 메시지를 보려면 backup.sh 2>&1또는를 사용하여 스크립트를 호출하세요. 오류 메시지만 보려면 스크립트를 호출하세요.backup.shbasckup.sh >/dev/null

관련 정보