나는 한 라이너 펄 검색을하고이 같은 약 보이는 대체 :Perl 내부 스크립트가 실패하더라도 종료 코드가 없으면 종료되는 이유는 무엇입니까?
perl -p -i -e 's/foo/bar/' non-existent-file.txt
파일이 의도하지 않은 (존재하지 않지만,이 때문에, 자동화 된 빌드 스크립트의 일부이기 때문에 내가) 그으로부터 보호하려는, 펄이 오류와 함께 종료 :
Can't open non-existent-file.txt: No such file or directory.
그러나, 종료 코드는 여전히 제로 :
echo $?
0
내가 뭔가 WR을하고 있는가 그거야? 스크립트 나 Perl을 호출하는 방법을 수정해야합니까? 필자는 Perl이 파일을 찾을 수 없기 때문에 0이 아닌 코드로 종료 할 것이라고 순진하게 추측했습니다.
파일을 열 수 없으면 Perl이 자동으로 종료되지 않습니다. 그 하나의 라이너는 Perl을위한 실제 스크립트이기 때문에 열려있을 때 파일을 열려고 시도합니다. STDERR에 기록 할 수 없으므로 STDERR에 기록하지만 나머지 스크립트에서 수행 할 작업이 있는지 여부를 알 수 없으므로 계속 진행됩니다. 이 경우에는 파일의 행을 반복 할 때 수행 할 작업이 없습니다. 그리고 스크립트의 끝에서 정상적으로 끝나고 0을 반환합니다. 특정 오류 코드로 스크립트를 '죽게'또는 '종료'하려면 스크립트에 추가해야합니다. – DeVadder