Сохранить вывод команды с ошибкой - PullRequest
0 голосов
/ 28 июня 2018

Я хочу сохранить вывод этой команды git checkout master

вывод этой команды имеет два состояния.

  1. success - команда выводит:

    Переключено на ветку 'X'

  2. сбой - команда выводит

    Ваши локальные изменения в следующих файлах будут перезаписаны извлечением <список файлов>: передайте изменения или сохраните их, прежде чем переключать ветки. Aborting

Я хочу сохранить вывод и проверить его успешность, проверив прерывание строки.

Это то, что я пробовал.

$output = git checkout master 2>&1
if ($output.Contains("Aborting")) {
    Write-Host $output -BackgroundColor Red
} else {
    Write-Host $output
}

но $output выдает что-то подобное, когда во втором состоянии:

enter image description here

Кажется, что команда выполнена, но это был неправильный синтаксис. Как это исправить? Я хотел бы вывести

enter image description here

1 Ответ

0 голосов
/ 28 июня 2018

Убедитесь, что вывод вашей команды stderr преобразован в обычные строки:

$output = [string[]] (git checkout master 2>&1)

Без преобразования [string[]] выходные строки stderr сохраняются в $output как [System.Management.Automation.ErrorRecord] экземпляры, и вывод таких экземпляров позже несколько ошибочно выводит их на экран, как если бы они были ошибками PowerShell.

(Обратите внимание, что PowerShell Core больше не демонстрирует такое поведение: хотя строки stderr по-прежнему захватываются как [System.Management.Automation.ErrorRecord] экземпляры, теперь они печатают как обычные строки .)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...