오류가 발생한 경우에만 일부 줄을 추가하도록 로그 형식을 지정하세요.

오류가 발생한 경우에만 일부 줄을 추가하도록 로그 형식을 지정하세요.

이와 같은 파일을 구해 출력을 파일로 가져오고 오류를 다른 로그 파일로 보내려고 합니다.

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

설명하다:

  1. find부분은 이전 버전과 동일합니다.
  2. 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

관련 정보