【发布时间】:2013-07-10 07:43:48
【问题描述】:
我有一个 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
我想避免在直接调用 wrapper 之前使用虚拟的 foo 符号链接并明确设置 $0。 是否可以在调用 Perl 脚本之前显式设置 $0?
我知道我可以从 within wrapper 分配给 $0,但我想设置要使用的 $0 的值 before 我调用wrapper,这样我就可以欺骗Perl 认为正在运行的文件名。
【问题讨论】:
-
您能详细描述一下您想做什么吗?调用者应该存在于系统中,因此必须定义硬链接或符号链接或别名或更确切地说是 bash 函数才能从提示符调用。因此,如果您确实想创建符号链接,您应该在 .bash_profile(或类似名称)中定义别名或函数,或将参数传递给
wrapper并将其称为wrapper foo(或类似名称)。但也许我误解了你的目标。