0

我每天在几个工作中运行以下代码片段:

  system("cp $keyFile  $destinationFile");
  system("chown $userID $destinationFile");
  system("chmod 400 $destinationFile");

上面代码的问题是,有时,非常罕见,至少上述操作之一没有成功完成,我的工作失败了。虽然如果上述操作之一失败,作业失败是可以的,但我仍然想避免简单系统命令之一失败。

所以我有以下选择:

  1. 使用 Perl 子例程File::Copy::copy, chmod,chown代替系统命令。
  2. 检查命令的返回值system()。我已经这样做了,但没有解释为什么它可能会失败。

使用 Perl 子例程而不是系统命令更好/更安全。我的作业将始终RHEL5机器上运行 [从不是 Windows]。

还有什么我可以在这里做的。我怎样才能收集更多关于出了什么问题的信息?

更新:文件名或文件路径永远不会包含空格或奇怪的字符。他们将来自集合 [a-zA-Z]。

4

1 回答 1

4

是的,使用 Perl 本地版本(File::Copychmod())总是更好。

在众多原因中:

  • 表现。在 1 到 2 个新进程之间调用system()分叉(一个用于命令,可能另一个用于 shell),这是一项繁重的操作

  • 错误检查。Perl 中与 IO 相关的系统调用会在"$!"发生错误时设置错误文本变量:

    File::Copy::copy($source, $destination)
        || die "Failed to copy from $source to $destination. Error: $!\n";
    
于 2012-04-21T06:46:51.160 回答