Bash 스크립트: 표준 오류 메시지를 사용자 정의 오류 메시지로 변경

Bash 스크립트: 표준 오류 메시지를 사용자 정의 오류 메시지로 변경

나는 나만의 작은 백업 스크립트를 작성하려고 노력해 왔습니다. 스크립트를 실행할 때 문제가 발생하는데 rm명령이 관련이 없습니다. 나는 여전히 출력을 처리하고 싶지만(작업 실패 여부에 따라 다른 메시지 표시) rm현재는 다음과 같습니다.
ls -t | tail -n +$startnumber | xargs -d '\n' rm && echo "Removed old backup(s)." || echo "No more than $keepnumber files; nothing to do."
불행하게도 출력은 다음과 같습니다.
rm: missing operand Try 'rm --help' for more information. No more than 14 files; nothing to do.
처음 두 줄을 제거하고 직접 출력하고 싶습니다 . "더 명확한" 메시지. 을 사용해 보았지만 rm -f이는 항상 (그리고 부정확하게) 성공적인 출력을 트리거합니다.

답변1

이러한 rm메시지는 표준 오류( stderr)로 전송됩니다. 표준 오류 출력( stderr)을 다음으로 리디렉션할 수 있습니다 /dev/null.

xargs -d '\n' rm 2>/dev/null

이렇게 하면 두 줄이 모두 터미널에 인쇄되는 것을 방지하고 사용자 정의 메시지만 표시됩니다.

답변2

난 그냥 임시 파일에 파일 목록을 저장하고 그것을 시도하기 전에 그 안에 있는 줄 수를 셉니다 rm. (또는 먼저 파일 수를 세어보세요.)

rm오류를 에서 로 리디렉션 할 수도 있지만 /dev/null이렇게 하면 마스킹됩니다.효과적인오류도 있습니다.

설명하다

tmpfile=$(mktemp)
ls -t | tail -n +$startnumber > $tmpfile
if [ -s "$tmpfile" ] ; then
    echo not empty, do something with filelist in $tmpfile
else
    echo empty, do something else
fi
rm "$tmpfile"

물론, ls어떤 이유로든 파일 이름에 개행 문자가 포함되어 있으면 문제가 발생합니다. (예, 가능합니다. 이 경우에는 일부 파일이 삭제되어야 하는데 삭제되지 않았음을 의미합니다.)

관련 정보