【发布时间】:2014-01-06 11:13:30
【问题描述】:
我有一个运行 mercurial 命令失败的任务,因为 mercurial 没有返回 0 而是 1。
当 mercurial 返回 1 并不意味着它是一个错误,但没有什么可做的。 根据文档:
Returns 0 if push was successful, 1 if nothing to push.
如何处理我的任务中的返回,以便当 hg 命令返回 0 或 1 时它不会中断。
这是失败的功能
Function Invoke-HgBookmark([string]$bookmarkname)
{
$repo = GetCredentials
& $hg.file bookmark -f $bookmarkname
Invoke-Expression "$($hg.file) push -B $bookmarkname $repo"
if ($LASTEXITCODE -eq 0 -Or $LASTEXITCODE -eq 1)
{
return 0
}
else
{
return -1
}
}
Psake 正在使用此代码调用我的函数:
try {
$global:lastexitcode = 0
& $cmd
if ($lastexitcode -ne 0) {
throw ("Exec: " + $errorMessage)
}
break
}
【问题讨论】:
-
您的函数似乎正在尝试处理 1 的退出代码。该函数是返回
-1还是以其他方式失败?如果它返回-1- 坚持Write-Host "$LastExitCode"以查看您获得的退出代码。您的if表达式逻辑看起来不错。顺便说一句,调用表达式是什么?我不明白为什么您不能像在 iex 上方的行中那样调用 $hg.file。 -
其实我正在学习powershell...我不需要iex。回到我的问题,我添加了 psake 正在使用的代码,我无法覆盖 $lastexitcode 以防 hg 返回 1
-
啊,在这种情况下,请尝试将
Return x替换为$LastExitCode = x。 -
$LastExitCode 不起作用,$global:lastexitcode = 0 工作正常。不太清楚为什么......我会尝试挖掘一点并写一个像样的答案
-
是的,这是有道理的。当您在脚本中设置 $LastExitCode 时,它会修改设置它的函数范围的值。所以是的,我应该说使用
$global:LastExitCode = x。
标签: powershell psake