백업 중에 전송된 모든 파일을 포함하여 모든 것을 표준 출력으로 인쇄하는 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.sh
basckup.sh >/dev/null