6

Я использую порт инструмента cygwin в Windows, который пишет обычные сообщения о состоянии в STRERR. Это приводит к ужасному выводу при запуске из PowerShell:

PS> dos2unix.exe -n StartApp.sh StartApp_fixed.sh
dos2unix.exe : dos2unix: converting file StartApp.sh to file StartApp_fixed.sh in UNIX format ...
At line:1 char:13
+ dos2unix.exe <<<<  -n StartApp.sh StartApp_fixed.sh
    + CategoryInfo          : NotSpecified: (dos2unix: conve...UNIX format ...:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

Есть ли способ лучше?

PS Я намерен опубликовать одно решение, которое я нашел, и сравнить его с ответами других.

2 ответа2

2

Нет увы Это безобразие является особенностью Powershell :( Если приложение печатает со стандартной ошибкой (и все остальное слушает), то Powershell оборачивает каждую строку в запутывающий объект 'NativeCommandError'. См. Https://stackoverflow.com/questions/1394084/ignoring-an-errorlevel-0-in-windows-powershell для более подробной информации.

Вы можете замолчать уродливые объекты, но тогда вы потеряете и полезный контент.

1

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

PS> $output = dos2unix.exe -n StartApp.sh StartApp_fixed.sh 2>&1
$output.CategoryInfo.TargetName | Out-Default
dos2unix: converting file StartApp.sh to file StartApp_fixed.sh in UNIX format ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .