2017-12-03 1 views
0

나는 항상 작동하지만, 파일을 삭제하지 않는 갑자기 무언가가 깨진 오래된 펄 스크립트를 가지고 있습니다.Perl 스크립트에서 파일을 삭제할 수 없습니다.

-rw-r--r-- 1 nobody uworld   6 Dec 03 11:15 shot32.file 

위의 파일을 삭제하는 명령은 내가 $의 shotfile이 shot32.file입니다 확인했다 펄 스크립트

`rm $shotfile`; 

내부이며 올바른 위치에 있습니다. 그래서 파일 위치와 파일 이름은 문제가되지 않습니다.

권한에 관해서는 perl 스크립트가 nobody 사용자로도 실행되므로이 ​​기능이 작동하지 않는 다른 이유는 무엇일까요?

감사합니다.

+0

파일을 삭제하기 위해 껍질을 벗기는 Perl 프로그램은 훌륭한 프로그램이 아닙니다! '\'rm $ shotfile \''을 $ shotfile 또는 die qq의 링크를 해제하도록 변경하십시오. "$ shotfile": $!}'을 삭제할 수 없으며 어떤 오류 메시지가 표시되는지보십시오. – Borodin

+0

음, 어떤 오류가 있었습니까? 'rm '은 실패시 STDERR에 오류 메시지를 내 보냅니다. – ikegami

답변

14

파일을 삭제하려면 해당 파일이있는 디렉터리에 대한 쓰기 권한이 있어야합니다. 파일에 대한 사용 권한은 중요하지 않습니다.

그건 말하지만, 그것은 당신이 가지고있는 꽤 끔찍한 코드입니다. 쉘을 거치지 않고 직접 실행할 수있는 rm을 실행하기 만하면됩니다 (쉘을 거치지 않고 직접 실행할 수 있음). 그리고 아무 이유없이 출력을 캡쳐하고 있습니다. 어쨌든 포착 된 모든 것). 또한 오류를 확인하지 않습니다 (이 형식에서도 더 어려울 것입니다).

이것은 훨씬 복잡합니다.

unlink $shotfile or warn "$0: can't unlink $shotfile: $!\n"; 

이 파일을 삭제하거나 어떤 문제에 대해 경고합니다 ($!과 실패의 원인을 포함) : 펄은 파일을 삭제하기위한 내장 기능이 있습니다. 프로그램을 대신 중단하려면 warndie으로 변경하십시오.

+0

감사합니다 멜포 민, 링크 해제가 작동하지만 rm does not weird .. – HungryProgrammer

관련 문제