我需要一个Perl脚本来使用任意名称生成自己,即使其余的OS 将其视为例如“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。可执行程序”。但是,我的代码段以及世界其他地方仍将自己视为“perl.exe”:
running as C:\path\to\my\perl.exe, PID is 1234
我做错了什么?有人可以对此有所了解吗?
答案 0 :(得分:1)
我发现了一个非常丑陋,虽然有效但黑客攻击:
#!perl -w
#spawnself-ugly.pl
use File::Copy;
if ($ARGV[0]) {
my $name = ($ARGV[0]);
copy($^X, $name);
my @args = ($name, $0);
system @args;
} else {
print "running as $^X, PID is $$\n";
print "press Enter to quit...\n";
my $trash = <>;
}
我实际上制作了perl.exe的副本并运行那个,所以最后我只是正在运行“aaa.exe”,所以没有必要撒谎。