如果我从命令提示符(c:\ windows \ system32 \ cmd.exe)运行Perl脚本,脚本完成执行后如何退出命令提示符。如何在调用Perl脚本后退出命令shell?
我在Perl脚本中尝试system("exit 0")
,但是它不会退出运行Perl脚本的cmd提示符shell。
我也在Perl脚本中试过exit;
命令,但那也行不通。
如果我从命令提示符(c:\ windows \ system32 \ cmd.exe)运行Perl脚本,脚本完成执行后如何退出命令提示符。如何在调用Perl脚本后退出命令shell?
我在Perl脚本中尝试system("exit 0")
,但是它不会退出运行Perl脚本的cmd提示符shell。
我也在Perl脚本中试过exit;
命令,但那也行不通。
如果你开始的命令shell只运行perl脚本,通过Arkaitz希门尼斯的答案应该工作(我投了赞成票。)
如果没有,你可以创建一个批处理文件中像runmyscript.bat
,与内容:
@echo off
perl myscript.pl
exit
的exit
将结束shell会话(和它的副作用,结束批处理脚本本身)
您可以使用START Dos command在新窗口中启动程序。如果您使用/B
来呼叫,则不会创建额外的窗口。然后您可以调用EXIT关闭当前窗口。
这会做诡计吗?
你试过cmd.exe /C perl yourscript.pl
?
根据cmd.exe /?
/C
执行由字符串指定的命令,然后终止。
对于这个问题,你可以运行'perl yourscript.pl'并将'cmd.exe'完全退出。 – 2010-01-12 16:18:29
您可以从Perl中发送信号给父shell:
kill(9,$PARENT_PID);`
不幸的是,getppid()
功能并不在Perl实现在Windows上,所以你必须通过一些其他找出父shell的PID手段。另外,#9号信号可能不是最好的选择。
你甚至在窗口上有SIGKILL(信号编号9)吗? – 2010-01-12 14:10:34
@Noufal:我确信SIGKILL(从perl发送)可以在Windows上运行;不知道它是如何实现的虽然 – catwalk 2010-01-12 14:18:41
尝试使用这样的命令行运行Perl脚本:第一个完成后
perl script.pl & exit
的符号将启动第二个命令。只有第一个成功(错误代码为0),您也可以使用&&
执行第二个命令。
这我相信是特定于UNIX的,并且不适用于Windows。 – 2010-01-12 14:13:37
不,看这里:http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ntcmds_shelloverview.mspx?mfr=true – 2010-01-12 14:17:52
+1非常有趣 – Andomar 2010-01-12 14:45:55
在bash中,你会调用perl脚本用“EXEC foo.pl” 。 – 2010-01-12 13:47:14
对不起,如果我忘了提及,我在Windows上运行它:-) – Santhosh 2010-01-12 13:51:06
这可能很难完成;关键是向父进程发送SIGHUP信号,但至少在ActiveState Perl中,getppid()未实现。 – geoffspear 2010-01-12 13:55:17