You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Redirected stderr output causes $? to be set to $false, even if the process exit code is 0 #13393
PR #13361 missed one aspect of what is was trying to fix, namely what was originally reported in #10512:
How $? is set in an external-program call should solely depend on the process exit code, irrespective of whether there is stderr output and whether or not stderr output is redirected.
It is the latter that's still a problem, which matters primarily with respect to && and ||:
# On Unix
PS> sh -c 'ls nosuch; :'2>$null || 'why did I get here?'
why did I get here?
Steps to reproduce
# On Unix
sh -c 'ls nosuch; :'2>$null; $?| Should -BeTrue
Expected behavior
The test should succeed:
Since the exit code of the sh command is 0, $? should be $true - irrespective of the presence of stderr output, whether redirected or not.
Actual behavior
The test fails, because the presence of redirected stderr output unexpectedly set $? to `$false
Activity
[-]My bug report[/-][+]Redirected stderr output causes $? to be set to $false, even if the process exit code is 0[/+]SteveL-MSFT commentedon Aug 10, 2020
Since @PowerShell/powershell-committee agreed that stderr is not an indicator of an error, it makes sense to not set
$?to false.