如何在Perl中捕获完整的命令行?

Laz*_*zer 10 perl command-line

假设呼叫是

/usr/local/bin/perl verify.pl 1 3 de# > result.log
Run Code Online (Sandbox Code Playgroud)

在内部verify.pl我想捕获上面的整个调用并将其附加到日志文件以进行跟踪.

如何捕获整个呼叫?

w.k*_*w.k 10

有办法(至少在unix系统上)获得整个命令行:

my $cmdline = `ps -o args -C perl | grep verify.pl`;
print $cmdline, "\n";
Run Code Online (Sandbox Code Playgroud)

e:使用PID的清洁方式(由Nathan Fellman提供):

print qx/ps -o args $$/;
Run Code Online (Sandbox Code Playgroud)

  • 我正在考虑使用类似`print qx/ps -o args $$ /;`的东西 (3认同)

Nat*_*man 8

$0有脚本名称并@ARGV有参数,所以整个命令行是:

$commandline = $0 . " ". (join " ", @ARGV);

或者,更优雅(感谢FMc):

$commandline = join " ", $0, @ARGV;

但是,我不知道如何捕获重定向(> result.log)

  • FWIW,`join`有多个参数:`join("",$ 0,@ ARGV)`. (3认同)