UNIX 쉘 스크립트 오류를 ​​기록하는 가장 좋은 방법은 무엇입니까

UNIX 쉘 스크립트 오류를 ​​기록하는 가장 좋은 방법은 무엇입니까

귀하에 따르면 스크립트 오류를 ​​기록하는 가장 좋은 방법은 무엇입니까?

다음을 시도했지만 아무것도 달성되지 않은 것 같습니다. (예외를 추가했습니다.) 사용자에게 권한이 없기 때문에 이 찾기 명령이 작동하지 않습니다./홈/데이터/직장/디렉토리.

1.)

$(find /home/data/work/. -type f -delete) >log.txt 2>&1

이건 내 이메일에 아무 것도 쓰지 않을 거야로그.txt

2.)

find /home/data/work/. -type f -delete >log.txt 2>log.txt

여기서 $() 없이 명령을 실행하는 것은 잘못된 것 같습니다.

삼.)

function log_this() {
echo "$(date): $*" | tee -a log.txt
}
$(find /home/data/work/. -type f -delete) || { log_this "error"; exit 1; }

이는 메시지 "오류"를 로그 파일에 기록하지만 여기서는 명령에서 log_this 함수로 오류를 리디렉션할 수 없습니다.

스크립트 로그를 생성하는 좋은 방법이 있습니까? $()를 사용하여 사용자 정의 메시지와 원시 오류를 로그 파일에 쓸 수 있습니다.

답변1

다음 중 하나를 통해 올바른 솔루션을 우회하는 것으로 보입니다.

  1. 의 출력을 find명령으로 실행합니다( find옵션 1과 3에서와 같이 명령 대체에 사용한 다음 해당 명령 대체를 명령으로 사용할 때 발생함). 또는
  2. 출력 스트림과 오류 스트림을 로 리디렉션합니다 log.txt.

올바른 변화는

find ... >log.txt 2>&1

즉, 명령을 실행하고 출력을 파일로 리디렉션한 다음 오류 스트림도 표준 출력이 있는 위치로 리디렉션합니다.

오류만 기록하려면 표준 출력을 리디렉션하지 마세요.

find ... 2>log.txt

moreutils패키지 에는 ts명령 출력에서 ​​타임스탬프를 가져오는 데 사용할 수 있는 명령이 있습니다.

find ... 2>&1 >/dev/null | ts >log.txt

위 명령은 표준 출력을 삭제 find하지만 오류 출력에 타임스탬프를 추가하고 log.txt.

관련 정보