我有一个Perl包装器脚本wrapper
,exec
是设置一些环境变量后的另一个工具。包装器可以调用的工具符号链接到wrapper
,它通过评估basename($0)
动态地确定已符号链接到它的工具。这是一个人为的例子来说明:
[/tmp]$ cat wrapper
#!/usr/bin/perl
use File::Basename;
$ENV{'CUSTOM_ENVIRONMENT'} = '1';
my $scriptName = basename($0);
exec("scripts/${scriptName}");
[/tmp]$ chmod +x wrapper
[/tmp]$ cat scripts/foo
#!/bin/sh
echo "foo"
[/tmp]$ ln -s wrapper foo
[/tmp]$ ./foo
foo
我希望避免需要伪foo
符号链接,并在直接调用$0
之前显式设置wrapper
。 是否可以在调用Perl脚本之前显式设置$0
?
我知道我可以在 $0
内从分配给wrapper
,但我想设置要使用的$0
的值在调用wrapper
之前,我可以欺骗Perl认为正在运行的文件名。
答案 0 :(得分:1)
这是一个可能的黑客:
perl -e '$0="something_else"; do "/path/to/wrapper"'
答案 1 :(得分:0)
这是一个包装器包装器:
open (my $wrapper, "<", "wrapper") or die("$!");
my $c = '$0 = "SPOOF";'.join("", <$wrapper>);
close ($wrapper);
eval $c;