根据“perltrap”中C程序员的部分以及我用Google搜索的所有内容,我应该使用“$ 0”来获取Perl中的程序名称。但是,当我运行以下“调用者”脚本时:
#!/usr/bin/perl
exec{"./called"}("name", "arg");
它本身调用以下“被调用”脚本:
#!/usr/bin/perl
print("$0 $ARGV[0]\n");
我得到了“./called arg
”!
如果我从“来电者”调用以下“called.c”程序:
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("%s %s\n", argv[0], argv[1]);
return 0;
}
我按预期得到“name arg
”。
有没有办法获取脚本名称,而不是路径?
答案 0 :(得分:0)
使用basename核心模块:
use File::Basename;
my $script_name = basename($0);
答案 1 :(得分:0)
经过Bash,Python甚至自定义脚本解释器的一些测试后,我发现Shebang机制不会将“argv [0]”传播给解释器,但会使用shebang之后的路径为“argv [ 0]“为翻译。我想这是C程序的一个功能,无法用脚本模拟。