2011-05-16 13 views
5

Mój profil PowerShell ma niestandardowy znak Powerhell, który niestety powoduje utratę wartości lastexitcode. Na przykład, biorąc pod uwagę skrypt powershell "fail.ps1" z zawartością "exit 123", kiedy uruchomię skrypt, $? to $ false, podczas gdy $ lastexitcode to 0. Jeśli zamiast tego uruchamiam powershell bez ładowania mojego profilu z niestandardowym monitem, po uruchomieniu fail.ps1 to $ lastexitcode wynosi 123.

Czy ktoś wcześniej widział ten problem? Czy istnieje sposób na zachowanie $ lastexitcode podczas generowania zachęty?

Wpadłem na to przy użyciu Posh-git, https://github.com/dahlbyk/posh-git, fajne polecenie Powerhell dla git.

+1

co robi wygląda jak? –

+0

Jeśli podejrzewasz, że problem leży w definicji pytania, dokonaj porównania przy użyciu '(get-item function: prmpt) .definition' na obu monitach. –

+0

Interesujące, $ LastExitCode powinny mieć wpływ tylko wywołania do aplikacji natywnych. Czy dzwonisz exe z podpowiedzi? Jeśli tak, idź z odpowiedzią @ dahlbyka. –

Odpowiedz

4

problem może być rozwiązany poprzez przechwytywanie $LASTEXITCODE na początku wiersza i przywrócenie go na koniec:

function prompt { 
    $realLASTEXITCODE = $LASTEXITCODE 

    # ... 

    $LASTEXITCODE = $realLASTEXITCODE 
} 
+0

Myślałem, że próbowałem, i to nie działało, musiałem mieć typ lub coś takiego. dzięki –

1

Trzeba to zrobić, aby to działało:

function prompt { 
    $realLASTEXITCODE = $global:LASTEXITCODE 

    # ... 

    $global:LASTEXITCODE = $realLASTEXITCODE 
    # cleanup 
    Remove-Variable realLASTEXITCODE 
} 
Powiązane problemy