为什么Exit可以让PowerShell强制退出


偶尔有人可能对exit有点误解,写出下面这样的例子:

function abc
{
'Start'
exit 100
'Done'
}

abc

当你执行上面的脚本,abc函数被调用,然后终止,你只会看到“Start”输出,看不到”Done”,变量$LASTEXITCODE中包含了一个值100,真相果真如此吗?

当你把上面的abc函数在交互式的PowerShell中的控制台中运行时,函数虽然再次终止,但是这一次连同PowerShell控制台也跟着一起倒闭了,为什么?

因为”Exit”是从调用者的作用域来终止,当你运行脚本时,脚本被终止,但是PowerShell还是可以继续运行。可是当你在PowerShell控制台以交互的方式来运行这个函数,你的PowerShell控制台也会被终止,此次终止发生在全局作用域,因为这一次除了控制台,没有更高的作用域了。

为了让上面的结论更加容易理解,我们把前面的示例脚本稍微改动下:

function abc
{
'Start'
exit 100
'Done'
}

 

'Function starts'
abc
'Function ends'

这一次,你会看的更加真切,”exit”真的没有终止abc这个函数,而是终止了整个脚本,你既看不到”Done”也看不到”Function ends”。
原文链接Why “exit” can kill PowerShell

本文链接: https://www.pstips.net/why-exit-can-kill-powershell.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注