在perl中运行exec时,我无法将输出重定向到文件。
我在exec中运行vlc但是因为我怀疑每个人都设置了我已经用下面的echo替换它,它显示了相同的行为。
我只对exec'命令'感兴趣,'args'格式的exec不是生成shell的那个,因为它生成一个带有vlc的子shell,它仍会打印到屏幕+其他问题,干净地杀死它。
use strict;
use warnings;
my $pid = fork;
if (!defined $pid) {
die "Cannot fork: $!";
}
elsif ($pid == 0) {
exec "/usr/bin/echo","done";
}
exec "/usr/bin/echo","done",">/dev/null";
正如预期的那样只打印“> / dev / null”,但值得一试。
exec "/usr/bin/echo done >/dev/null";
运行sh,然后运行echo,在这里工作,但不是我在vlc的实际问题,我认为我会包括在内,因为有人肯定会建议它。
当对文件使用'command','args'时,如何重定向此exec的输出?
需要更多信息,请询问。
答案 0 :(得分:3)
原来你可以在exec之前更改文件描述符
use strict;
use warnings;
my $pid = fork;
if (!defined $pid) {
die "Cannot fork: $!";
}
elsif ($pid == 0) {
open STDOUT, ">", '/logger/log' or die $!;
open STDERR, ">", '/logger/log' or die $!;
exec "/usr/bin/echo","done";
}
答案 1 :(得分:0)
我想如果你只需要打印到文件,这应该可行。
捕获输出的最简单方法是使用反引号。
use strict;
use warnings;
open (my $file, '>', 'output.log');
my $pid = fork;
if (!defined $pid) {
die "Cannot fork: $!";
}
elsif ($pid == 0) {
print $file `/usr/bin/echo done`;
}