1

我有一个 perl 脚本,它必须在 exec 中调用 tar。

exec("tar zcf /tmp/mytarball.gz directoryToTarBall > /dev/null 2>&1" or die ("$!")

这是一个我已经分叉的子进程,与此同时,我正在通过向 STDOUT 写一个句号来监视 tar 的进度。我遇到的问题是我不希望 tar 在创建 tarball 时变得冗长 - 我不希望输出回显到 stdout ....我只希望进度计数器(句号)回显到屏幕。我以为我可以在 exec 命令中传递 a >/dev/null 2>&1,但这不起作用。

任何想法都非常受欢迎。谢谢并恭祝安康

4

2 回答 2

3

使用该exec LIST表格来避免由于 shell 引用而引起的意外。这还需要执行 shell 将为您执行的重定向。

use 5.10.0;  # //

my $pid = fork // die "$0: fork: $!";   # / fix Stack Overflow highlighting
if ($pid) {
  waitpid $pid, 0 or die "$0: waitpid: $!";
  warn "$0: child exited abnormally" if $?;
  print ".\n";  # done!
}
else {
  open STDOUT, ">",  "/dev/null" or die "$0: open: $!";
  open STDERR, ">&", \*STDOUT    or exit 1;
  exec "tar", "zcf", "/tmp/mytarball.gz", "directoryToTarBall";
  exit 1;
}
于 2013-01-26T16:41:51.803 回答
0
perl -e "exec(\"ls >/dev/null\")"

至少对我有用。试2>&1

这种令人费解的混乱也有效

perl -e "exec(\"ls >&2 2>&1 1>/dev/null\")"

即使这样也行,认为它可能不应该

perl -e "exec(\"ls 1>&2 >/dev/null\")"

你到底卡在哪里了?

于 2013-01-26T16:16:31.647 回答