我有一个perl脚本,必须在exec中调用tar。
exec("tar zcf /tmp/mytarball.gz directoryToTarBall > /dev/null 2>&1" or die ("$!")
这是一个我分叉的子进程,与此同时,我通过写STDOUT的句号来监视tar的进度。我遇到的问题是我不希望tar在创建tarball时变得冗长 - 我不希望输出回显到stdout ....我只是想让进度计数器(完全停止)回显到屏幕。我以为我可以在exec命令中传递>/dev/null 2>&1
,但这不起作用。
任何想法都很受欢迎。谢谢和问候
答案 0 :(得分: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;
}
答案 1 :(得分: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\")"
你到底在哪里?