귀하에 따르면 스크립트 오류를 기록하는 가장 좋은 방법은 무엇입니까?
다음을 시도했지만 아무것도 달성되지 않은 것 같습니다. (예외를 추가했습니다.) 사용자에게 권한이 없기 때문에 이 찾기 명령이 작동하지 않습니다./홈/데이터/직장/디렉토리.
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
다음 중 하나를 통해 올바른 솔루션을 우회하는 것으로 보입니다.
- 의 출력을
find
명령으로 실행합니다(find
옵션 1과 3에서와 같이 명령 대체에 사용한 다음 해당 명령 대체를 명령으로 사용할 때 발생함). 또는 - 출력 스트림과 오류 스트림을 로 리디렉션합니다
log.txt
.
올바른 변화는
find ... >log.txt 2>&1
즉, 명령을 실행하고 출력을 파일로 리디렉션한 다음 오류 스트림도 표준 출력이 있는 위치로 리디렉션합니다.
오류만 기록하려면 표준 출력을 리디렉션하지 마세요.
find ... 2>log.txt
moreutils
패키지 에는 ts
명령 출력에서 타임스탬프를 가져오는 데 사용할 수 있는 명령이 있습니다.
find ... 2>&1 >/dev/null | ts >log.txt
위 명령은 표준 출력을 삭제 find
하지만 오류 출력에 타임스탬프를 추가하고 log.txt
.