PowerShell: удаление результата вызова из функции - наилучшая практика - PullRequest
1 голос
/ 07 марта 2019

У меня есть функция, и в этой функции я вызываю функцию git:

function Confirm-GitStatus
{
    # a bunch of stuff
    & git --git-dir $gitDir --work-tree $basePath  checkout $targetBranch 2>&1
    # more stuff
    return $true
}

Результатом этого на самом деле является массив, содержащий результат вызова git и $ true.Чтобы получить желаемый результат, я должен был сделать это:

$disposableMessage = & git --git-dir $gitDir --work-tree $basePath  checkout $targetBranch 2>&1

Это кажется грубым.Как лучше всего совершать звонки и подбрасывать результат?

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

Поскольку вы все равно используете перенаправление потока - 2>&1 для объединения потока ошибок PowerShell (из stderr git) в поток успеха (из stdout)) - самое простое решениедолжен перенаправить все потоки (*) на $null с *> $null;упрощенный пример:

# Note: This command produces both stdout and stderr output.
cmd /c "echo hi & dir \nosuch" *> $null

# PowerShell Core example with Bash:
bash -c 'echo hi; ls \nosuch'  *> $null

Тем не менее, в общем рассмотрим $null = ... для отбрасывания (успешного) вывода команды , потому что оно:

  • передает намерение вперед

  • быстрее, чем > $null и особенно ... | Out-Null в большинстве случаев. [1]

Применимо к приведенным выше примерам:

$null = cmd /c "echo hi & dir \nosuch" 2>&1

$null = bash -c 'echo hi; ls \nosuch'  2>&1

[1] In PowerShell Core, Out-Null имеет оптимизацию, если единственным предшествующим сегментом конвейера является выражение без побочных эффектов, а не вызов командлета или функции;Например, 1..1e6 | Out-Null выполняется почти мгновенно, потому что выражение, похоже, даже не выполняется.Однако такой сценарий нетипичен, и функционально эквивалентный Write-Output (1..1e6) | Out-Null занимает много времени, намного дольше, чем $null = Write-Output (1..1e6).

0 голосов
/ 07 марта 2019

Вы можете передать свою команду на Out-Null.

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