这可能吗?我终于决定开始建立我个人的.NET开发环境,以更接近地模仿我如何建立一个*NIX开发环境,这意味着要认真学习Powershell.
我正在编写一个函数,通过文件系统进行递归,设置工作目录,以便构建东西.困扰我的一件小事是,如果我将Ctrl + C排除在函数之外,它会让我离开脚本最后的位置.我已经尝试设置一个trap块,在运行时将dir更改为起始点,但这似乎只是在Exception上打算(和触发).
如果这是一种在Unix中具有root权限的语言,我会设置一个信号处理程序SIGINT,但我在Powershell中找不到任何类似的搜索.戴上我的.NET上限,我想象有一些事件,我可以附加一个处理程序,如果我不得不猜测,这是一个事件$host,但我找不到任何规范文档System.Management.Automation.Internal.Host.InternalHostUserInterface,并且没有任何关于我能够搜索的轶事是有帮助的.
也许我错过了一些完全明显的东西?
我有一个管道函数,它在begin块中分配一些需要在最后处理的资源.我已尝试在end块中执行此操作但在函数执行中止时不会调用它,例如ctrl+ c.
如何修改以下代码以确保$sw始终处置:
function Out-UnixFile([string] $Path, [switch] $Append) {
<#
.SYNOPSIS
Sends output to a file encoded with UTF-8 without BOM with Unix line endings.
#>
begin {
$encoding = new-object System.Text.UTF8Encoding($false)
$sw = new-object System.IO.StreamWriter($Path, $Append, $encoding)
$sw.NewLine = "`n"
}
process { $sw.WriteLine($_) }
# FIXME not called on Ctrl+C
end { $sw.Close() }
}
Run Code Online (Sandbox Code Playgroud)
编辑:简化功能