파일이 존재하지 않을 때 오류 방지

파일이 존재하지 않을 때 오류 방지

파일의 내용을 가져와야 하는데 파일이 없으면 오류가 발생하지 않도록 하고 싶습니다.

이런 일이 가능합니까?

cat my-file.txt || false

답변1

당신에게는 여러 가지 선택이 있습니다

  1. 파일이 존재하지 않는 한 인쇄하지 마세요. 하지만 cat파일이 존재하지만 열 수 없는 경우에는 여전히 불평을 허용합니다.

    [ -f my-file.txt ] && cat my-file.txt
    
  2. 리디렉션을 통해 어떤 이유로 파일을 열 수 없을 때 생성되는 오류 메시지가 인쇄되지 않도록 하세요.표준 에러"아무데도"

    cat my-file.txt 2>/dev/null
    
  3. $?오류가 발생했음을 나타내는 0이 아닌 종료 상태를 설정하지 마십시오 .

     cat my-file.txt || true
    

처음 두 경우에 다음 명령은 성공 여부를 확인하기 위한 상태 테스트일 수 있습니다 cat. 예를 들어

cat my-file.txt 2>/dev/null
[ $? -ne 0 ] && echo 'There was an error accessing my-file.txt'

또한 다음과 같이 더 읽기 쉬운 조건문으로 래핑할 수 있습니다.

if ! cat my-file.txt 2>/dev/null
then
    echo 'There was an error accessing my-file.txt'
fi

if마지막 경우에는 종료 상태를 성공적으로 숨겨 cat 복합 명령의 종료 상태를 다음과 같이 만들기 때문에 명령문에서 명령을 사용할 필요가 없습니다.언제나0입니다(어떤 면에서는 "오류를 방지"합니다).

답변2

표준 오류 끄기 2>&-:

cat my-file.txt 2>&- || false

위아래로:2>&-, 2>/dev/null, |&, &>/dev/null 및 >/dev/null 2>&1의 차이점

관련 정보