Skip to content

Native error codes are masked in PowerShell pipelines on Unix-like platforms #8419

@mklement0

Description

@mklement0

On Unix-like platforms, with SIGPIPE signals being ignored, as in Ruby, writing to a broken pipe (a pipe whose reader process has since terminated) returns standard error code EPIPE.

However, it seems that in PowerShell - unlike in POSIX-like shells such as bash - the error code is not relayed to the writing process.

Steps to reproduce

Write 100,000 lines via Ruby, but cause the pipe to break via head -n 1 exiting after having received the 1st input line:

ruby -e '(1..1e5).each do |i| puts i end' | head -n 1

Expected behavior

1
-e:1:in `write': Broken pipe @ io_write - <STDOUT> (Errno::EPIPE)
	from -e:1:in `puts'
	from -e:1:in `puts'
	from -e:1:in `block in <main>'
	from -e:1:in `each'
	from -e:1:in `<main>'

Actual behavior

1

That is, the Ruby code never saw the EPIPE standard error code that results from writing to a broken pipe while SIGPIPE signals are being ignored.

PowerShell Core v6.2.0-preview.2 on macOS 10.14.1
PowerShell Core v6.2.0-preview.2 on Ubuntu 18.04.1 LTS

Metadata

Metadata

Assignees

No one assigned

    Labels

    Resolution-No ActivityIssue has had no activity for 6 months or moreWG-Enginecore PowerShell engine, interpreter, and runtime

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions