【发布时间】:2012-04-03 22:00:12
【问题描述】:
我需要一个 Perl 脚本来生成具有任意名称的自身,即,以便 操作系统的其余部分 将其视为例如“aaa.exe”。我的印象是在 Perl 中可以做到这一点,但现在我不确定了。
我在 Windows 7 amd64 上使用 Strawberry Perl 5.14,32 位版本。
这是我尝试过但不起作用的方法:
#!perl -w
# spawnself.pl
if ($ARGV[0]) {
my $name = ($ARGV[0]);
system {"perl"} $name, $0;
} else {
print "running as $^X, PID is $$\n";
print "press Enter to quit...\n";
my $trash = <>;
}
我根据来自exec perldoc page(系统页面链接那里)的示例编写了这个:exec {'/bin/csh'} '-sh';,其中,IIUC,目标是让 /bin/csh 认为它是“-sh”,虽然我不是确定这是否也应该使 csh 从外部看起来像“-sh”。另外,这是 UNIX 示例,而我在 Windows 上。
我想要一个脚本,它以spawnself.pl aaa.exe 运行(从命令行)会自行生成,打印running as aaa.exe, PID is 1234,然后查看任务管理器会将此程序显示为“aaa.exe”。但是,我的 sn-p 以及世界其他人仍然认为自己是“perl.exe”:
- 在任务管理器中,进程 1234 仍然被命名为“perl.exe”,所以它会打印出来
running as C:\path\to\my\perl.exe, PID is 1234
我做错了什么?有人可以解释一下吗?
【问题讨论】:
-
经过一番研究,我发现了
running as spawnper.pl的问题——我误解了$0,我正在编辑Q以过滤掉这个问题