无法从Perl脚本中删除该文件

Hun*_*mer 0 unix perl

我有一个旧的perl脚本,它一直在工作,但突然有些东西被打破,而不是删除文件.

-rw-r--r--    1 nobody   uworld           6 Dec 03 11:15 shot32.file
Run Code Online (Sandbox Code Playgroud)

删除上述文件的命令位于perl脚本中

`rm $shotfile`;
Run Code Online (Sandbox Code Playgroud)

我检查过$ shotfile是shot32.file,它位于正确的位置.所以文件位置和文件名不是问题.

关于权限,perl脚本也在nobody用户下运行,因此可能是其他原因导致无效.

感谢您的帮助.

mel*_*ene 16

要删除文件,您需要对文件所在目录具有写权限.文件的权限无关紧要.

那就是说,你已经有了一些相当糟糕的代码.你正在炮轰(没有逃脱任何东西,你好贝壳注入!)只是为了运行rm(你可以直接运行而不通过shell),并且你无缘无故地捕获它的输出(并且你忽略了任何东西)无论如何被捕获了).此外,您没有检查错误(这种形式也会更难).

这比现在复杂得多.Perl有一个用于删除文件的内置函数:

unlink $shotfile or warn "$0: can't unlink $shotfile: $!\n";
Run Code Online (Sandbox Code Playgroud)

这将删除文件或警告您有任何问题($!包含失败的原因).如果您希望程序中止,请更改warndie.