Канал PowerShell добавляет перевод строки

Я пытаюсь передать строку в STDIN программыбез любые завершающие переводы строки (если только эта строка на самом деле не заканчивается переводом строки). Я пытался погуглить, но я нашел только людей, пытающихся напечатать наприставка без завершающего перевода строки, в этом случаеWrite-Host принимает параметр-NoNewLine, Однако, чтобы передать его в другую программу, мне нужноWrite-Output или аналогичный, который не имеет такого параметра. Теперь похожеWrite-Output даже не проблема:

Z:\> (Write-Output "abc").Length
3

Но как только я передаю ее в другую программу и читаю там строку, я получаю дополнительный перевод строки. Например, я попробовал этот фрагмент Ruby:

Z:\> Write-Output "abc" | ruby -e "p ARGF.read"
"abc\n"

Я проверил, что полученная строкаabc\n, То же самое происходит в некоторых других языках (по крайней мере, C #, Java и Python), поэтому я считаю, что это проблема с PowerShell, а не с языком, выполняющим чтение.

В качестве дальнейшего теста я заменилWrite-Output сам с другим скриптом Ruby:

Z:\> ruby -e "
Z:\> ruby -e "$> << 'abc'"
abcZ:\>
gt; << 'abc'" abcZ:\>

(То есть точно нет\n на сценарии STDOUT.)

Но опять же, когда я передаю это в другой скрипт:

Z:\> ruby -e "
Z:\> ruby -e "$> << 'abc'" | ruby -e "p ARGF.read"
"abc\n"
gt; << 'abc'" | ruby -e "p ARGF.read" "abc\n"

Я совершенно уверен, что это канал, который добавляет перевод строки. Как мне этого избежать? На самом деле я хочу иметь возможность контролировать, заканчивается ли ввод переводом строки или нет (включив его во вход или пропустив его).

(Для справки я также протестировал строки, которые уже содержат завершающий перевод строки, и в этом случае каналне добавьте еще один, так что я предполагаю, что он просто обеспечивает конечный перевод строки.)

Изначально я сталкивался с этим в PowerShell v3, но сейчас я использую v5, но проблема все еще остается.

Ответы на вопрос(0)

Ваш ответ на вопрос