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