【问题标题】:Custom powershell prompt is clearing $lastexitcode自定义 powershell 提示正在清除 $lastexitcode
【发布时间】:2011-05-16 06:52:49
【问题描述】:

我的 powershell 配置文件有一个自定义的 powershell 提示,不幸的是导致 $lastexitcode 值丢失。例如,给定一个内容为“exit 123”的powershell脚本“fail.ps1”,当我运行该脚本时,$?是 $false 而 $lastexitcode 为 0。如果我运行 powershell 而不使用自定义提示加载我的配置文件,则在运行 fail.ps1 之后 $lastexitcode 为 123。

以前有人见过这个问题吗?有没有办法在生成提示时保留 $lastexitcode ?

我在使用 Posh-git 时遇到了这个问题,https://github.com/dahlbyk/posh-git,一个不错的 git PowerShell 提示符。

【问题讨论】:

  • 你的提示是什么样的?
  • 如果您怀疑问题出在提示定义中,请在两个提示上使用(get-item function:prmpt).definition 进行比较。
  • 有趣,$LastExitCode 应该只受到对本机应用程序的调用的影响。您是从提示符中调用 exe 吗?如果是这样,请使用@dahlbyk 的答案。
  • 我在 Windows 8 上的 PowerShell 3 中进行了测试,本机 .EXE 的退出代码被正确保留,无需 dahlbyk 的修复。以前的版本可能会有所不同。
  • 是的 bart,posh-git 中的问题已修复。

标签: command-line powershell


【解决方案1】:

可以通过在提示符开头捕获$LASTEXITCODE并在结尾处恢复它来解决问题:

function prompt {
    $realLASTEXITCODE = $LASTEXITCODE

    # ...

    $LASTEXITCODE = $realLASTEXITCODE
 }

【讨论】:

  • 我以为我试过了,但没用,我一定是有类型什么的。谢谢
【解决方案2】:

您需要这样做才能使其工作:

function prompt {
    $realLASTEXITCODE = $global:LASTEXITCODE

    # ...

    $global:LASTEXITCODE = $realLASTEXITCODE
    # cleanup
    Remove-Variable realLASTEXITCODE
 }

【讨论】:

    猜你喜欢
    • 2010-11-23
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 2013-02-23
    相关资源
    最近更新 更多