【问题标题】:Unable to delete the file from Perl script无法从 Perl 脚本中删除文件
【发布时间】:2018-05-17 04:22:12
【问题描述】:

我有一个旧的 perl 脚本,它一直在工作,但是突然有东西坏了,没有删除文件。

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

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

`rm $shotfile`;

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

关于权限,perl 脚本也是在 nobody 用户下运行的,所以还有什么其他原因导致它无法正常工作。

感谢您的帮助。

【问题讨论】:

  • 一个能删除文件的 Perl 程序不是一个好程序!将 `rm $shotfile` 更改为 unlink $shotfile or die qq{Unable to delete "$shotfile": $!} 并查看您收到的错误消息。
  • 嗯,你得到了什么错误? rm 在失败时向 STDERR 发出错误消息。

标签: perl unix


【解决方案1】:

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

也就是说,你得到了一些非常糟糕的代码。你正在炮击(没有转义任何东西,你好 shell 注入!)只是为了运行 rm (你可以直接运行而不通过 shell),你正在无缘无故地捕获它的输出(而且你'重新忽略无论如何捕获的任何内容)。此外,您没有检查错误(在这种形式下也会更难)。

这一切都比它必须要复杂得多。 Perl 有一个用于删除文件的内置函数:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多