programing

diff의 오류 종료 값은 무엇입니까?

procenter 2021. 1. 15. 19:44
반응형

diff의 오류 종료 값은 무엇입니까?


diff사람 페이지 나는이 종료 값을 발견했습니다 :

    0     No differences were found. 
    1     Differences were found.
   >1     An error occurred.

다른 오류에 대해 1 이상의 다른 종료 값이 있습니까?


그것은 당신의 diff명령 에 달려 있습니다 . Mine (GNU diffutils 3.0) 말한다 :

종료 상태는 0차이가 없음을 1의미하고 일부 차이가 있음을 2의미하며 문제 가 있음을 의미합니다. 일반적으로는, 다른 바이너리 파일 문제로 간주하지만, 이것은 사용에 의해 변경 될 수 있습니다 -a또는 --text옵션이나 -q또는 --brief옵션을 선택합니다.


사용하는 diff 버전에 따라 다른 오류 코드가 있거나 없을 수 있습니다. 올바르게 기억하면 표준 BSD diff는 항상 종료 코드 0, 1 또는 2를 반환했습니다.

그러나 맨 페이지는 diff가 할 수있는 모든 것을 매핑하는 것이 아니라 diff 명령을 사용하는 데 사용할 수있는 문서입니다. 쉘 스크립트에서 파일이 일치하는지 (exit = 0) 또는 일치하지 않는지 (exit = 1) 알고 싶습니다. 그러나 셸 스크립트에서 diff 명령 자체가 작동하지 않았는지 알고 싶습니다.

diff $file1 file2 > /dev/null 2>&1
error=$?
if [ $error -eq 0 ]
then
   echo "$file1 and $file2 are the same file"
elif [ $error -eq 1 ]
then
   echo "$file1 and $file2 differ"
else
   echo "There was something wrong with the diff command"
fi

2가 diff 명령이 실패했음을 의미하지만 새로운 버전의 diff 명령이 읽을 수없는 파일 (exit = 2)과 누락 된 파일 (exit = 3)을 구분했다고 가정 해보십시오. 이제 이전 버전의 diff 명령에서 다음을 수행했지만 $file2존재하지 않았다고 상상해보십시오 .

diff $file1 file2 > /dev/null 2>&1
error=$?
if [ $error -eq 2 ]
then
   echo "There was something wrong with the diff command"
elif [ $error -eq 1 ]
then
   echo "$file1 and $file2 differ"
else
   echo "$file1 and $file2 are the same file"
fi

위 코드에서 오류 코드 2와 1을 확인했지만 3은 확인하지 않았습니다. 따라서 누락 된 파일을 감지하는 대신 파일이 일치한다고 가정합니다.

맨 페이지는 향후 OS 업그레이드로 인해 대부분의 셸 스크립트가 갑자기 실패하지 않도록하려고합니다. 별도 있었다 이유입니다 awknawk명령과 별도의 grepegrep명령.

* @ chus의 댓글에 따라 업데이트되었습니다.


제 경우에는 diff가 127을 반환하고이를 검색하여 tldp.org "특별한 의미가있는 종료 코드"에서 찾습니다.

127 "command not found"illegal_command $ PATH 또는 오타에 문제가있을 수 있습니다.

diff에 잘못된 경로를 사용했습니다. :)

글꼴 : tldp.org/LDP/abs/html/exitcodes.html

참조 URL : https://stackoverflow.com/questions/6971284/what-are-the-error-exit-values-for-diff

반응형