【发布时间】:2018-12-18 17:05:55
【问题描述】:
所以我要做的是重新创建一个与我在 Bash 中使用的类似的函数,但在 Powershell 中:
yell() { echo "$0: $*" >&2; }
die() { yell "$*"; exit 111; }
try() { "$@" || die "FAILED: $*"; }
目前我最感兴趣的部分是这里的 try() 函数。本质上它的作用是允许我用这个函数包装一个命令并让它管理退出代码。效果是这样的:
try doSomething -args
如果doSomething 以非零值退出,它会将命令输出到stderr 并停止脚本执行。
我意识到 Powershell 有一个可用于中止脚本的错误操作,但它似乎只适用于命令行开关。我需要一些可以在整个脚本中使用的东西。我还希望避免大量冗长的 try/catch 逻辑使脚本变得混乱,因此需要像 try/yell/die 这样优雅的东西。这样,我可以单独在这个函数中编写处理,然后用它来调用我想要处理的任何东西。
我找到了$MyInvocation 并认为这可能是其中的方法,但我似乎无法找到从函数中实际执行它的方法。例如:
function run() {
$MyInvocation # ?? what do??
}
run doSomething -args
我想我可以自己解决剩下的问题,我只是不太清楚如何编写这个包装函数。有什么想法吗?
更新
所以我做了一些俗气的事情,我对命令进行了子串化,并对剩下的内容做了一个Invoke-Expression,它似乎有效。感觉超级hacky,所以我仍然对想法持开放态度:
function attempt() {
$thisCommand = $MyInvocation.Line.Trim()
Write-Output $thisCommand
Invoke-Expression $thisCommand.Substring(8)
if($LASTEXITCODE -ne 0) {
throw "Command failed $thisCommand"
exit 111
}
}
attempt doSomething -args
【问题讨论】:
标签: linux powershell-core powershell-v6.0