이와 같은 파일을 구해 출력을 파일로 가져오고 오류를 다른 로그 파일로 보내려고 합니다.
find /some_dir -maxdepth 1 -mindepth 1 > outputFile.txt 2>>log.txt;
에 다른 로그가 있습니다 log.txt
. 오류 전후에 몇 줄(예: 찾기에서 오류를 식별하기 위해 *****)을 추가하고 찾기 명령에 오류가 있는 경우에만 추가하려면 어떻게 해야 합니까?
답변1
이 non_existent_dir
매개변수는 find
오류 메시지를 생성하기 위해 추가됩니다.
변수가 있는
#!/bin/bash
error=$(find . non_existent_dir 2>&1 > output.txt)
if (($?)); then
printf "%s\n%s\n%s\n" "message before" "$error" "message after" >> log.txt
fi
설명하다:
2>&1 > output.txt
-stderr
(번호 2)는stdout
(번호 1)stdout
및 로 리디렉션됩니다output.txt
.$?
-find
명령 종료 상태.find
모든 파일이 성공적으로 처리되면 상태 0으로 종료하고, 오류가 발생하면 0보다 큰 상태로 종료합니다.
변수 없음
find . non_existent_dir 2>&1 > output.txt |
awk 'NR == 1 {print "start message"}
{print}
END {if(NR > 0) print "end message"}' >> log.txt
설명하다:
- 이
find
부분은 이전 버전과 동일합니다. awk
부분 - 입력에 줄이 없으면(오류가 발생하지 않음) 아무 것도 인쇄되지 않습니다.NR == 1 {print "start message"}
- 첫 번째 줄이면 "start message"를 출력한다.{print}
- 모든 입력 라인을 인쇄하십시오.END {if(NR > 0) print "end message"}
- 실행이 끝나면 입력(NR
- 레코드 수)에서 가져온 행이 있는지 확인하세요. 그렇다면 "종료 메시지"가 인쇄됩니다.
답변2
다음과 같은 함수를 만들 수 있습니다.
function append()
{
if [[ -s /tmp/stderr ]]
then
{ echo -e '\nText you want like ***\n' >> log.txt
cat /tmp/stderr >> log.txt;
rm /tmp/stderr
}
fi
}
그런 다음 다음과 같이 명령을 실행합니다.
$ find /some_dir -maxdepth 1 -mindepth 1 > outputFile.txt 2>/tmp/stderr;
$ append