【问题标题】:How do I exit the command shell after it invokes a Perl script?如何在调用 Perl 脚本后退出命令 shell?
【发布时间】:2011-01-04 04:36:42
【问题描述】:

如果我从命令提示符 (c:\windows\system32\cmd.exe) 运行 Perl 脚本,如何在脚本执行完成后退出命令提示符。

我在 Perl 脚本中尝试了system("exit 0"),但这并没有退出运行 Perl 脚本的 cmd 提示符 shell。

我也在 Perl 脚本中尝试了exit; 命令,但也不起作用。

【问题讨论】:

  • 在 bash 中,您可以使用“exec foo.pl”调用 perl 脚本。
  • 对不起,如果我忘了提,我在 Windows 中运行它:-)
  • 这可能很难完成;关键是向父进程发送 SIGHUP 信号,但至少在 ActiveState Perl 中,getppid() 是未实现的。
  • 看起来我们有以下方法:[1] 如果我打开命令 shell 只是为了运行 perl 脚本,那么我可以执行 cmd.exe /C perl myscript.pl 或 start.exe /B perl myscript.pl [2] 如果我还没有在任何命令 shell 中并且我只想调用 perl 脚本,那么我可以编写一个批处理文件来调用脚本然后调用 exit。比如:perl myscript.pl;出口;谢谢!!

标签: perl exit cmd


【解决方案1】:

尝试使用这样的命令行运行 Perl 脚本:

perl script.pl & exit

& 符号将在第一个命令完成后启动第二个命令。您也可以使用&& 仅在第一个命令成功时执行第二个命令(错误代码为0)。

【讨论】:

【解决方案2】:

你试过cmd.exe /C perl yourscript.pl吗?

根据cmd.exe /?/C执行字符串指定的命令,然后终止。

【讨论】:

  • 就此而言,您可以运行 perl yourscript.pl 并完全离开 cmd.exe
  • 在 Windows 10 上,如果我启动命令提示符,并且只输入 perl - 它不会运行任何内容,如何关闭仍然打开的命令提示符窗口?尝试退出再见退出所有无济于事。
【解决方案3】:

如果您只是为了运行 perl 脚本而启动命令 shell,那么 Arkaitz Jimenez 的答案应该可以工作(我投了赞成票。)

如果没有,你可以创建一个像runmyscript.bat这样的批处理文件,内容:

@echo off
perl myscript.pl
exit

exit 将结束 shell 会话(并作为副作用,结束批处理脚本本身。)

【讨论】:

    【解决方案4】:

    您可以使用START Dos command 在新窗口中启动程序。如果您使用/B 调用它,则不会创建额外的窗口。然后你可以调用 EXIT 来关闭当前窗口。

    这样可以吗?

    【讨论】:

      【解决方案5】:

      您可以从 Perl 向父 shell 发送信号:

       kill(9,$PARENT_PID);`
      

      不幸的是,getppid() 函数没有在 Windows 上的 Perl 中实现,因此您必须通过其他方式找出父 shell PID。此外,信号 #9 可能不是最佳选择。

      【讨论】:

      • 你在windows上还有SIGKILL(9号信号)吗?
      • @Noufal:我确信 SIGKILL(从 perl 发送)在 Windows 上可以正常工作;不知道它是如何实现的
      猜你喜欢
      • 1970-01-01
      • 2011-03-13
      • 1970-01-01
      • 2017-08-15
      • 2013-03-01
      • 2022-12-07
      • 2012-10-17
      • 1970-01-01
      • 2014-11-21
      相关资源
      最近更新 更多