Разница между $? и $LastExitCode в PowerShell
В PowerShell, в чем разница между $?
и $LastExitCode
?
Я прочитал об автоматических переменных, и он сказал:
$? Contains the execution status of the last operation. It contains TRUE if the last operation succeeded and FALSE if it failed.
$LastExitCode Contains the exit code of the last Windows-based program that was run.
В определении $?
он не объясняет, что означает преуспевание и сбой.
Я спрашиваю, потому что предположил, что $?
является True тогда и только тогда, когда $LastExitCode равен 0, но я нашел неожиданный встречный пример: $LastExitCode = 0, но $? = Неверно в PowerShell. Перенаправление stderr в stdout дает NativeCommandError.
Ответы
Ответ 1
$LastExitCode
- код возврата собственных приложений. $?
просто возвращает True
или False
в зависимости от того, завершилась ли последняя команда (командлет или родной) без ошибок или нет.
Для отказа командлетов обычно подразумевается исключение, для собственных приложений это ненулевой код выхода:
PS> cmd /c "exit 5"
PS> $?
False
PS> cmd /c "exit 0"
PS> $?
True
Отмена командлета с помощью Ctrl + C также будет считаться ошибкой; для собственных приложений это зависит от того, какой код выхода они устанавливают.