web-dev-qa-db-ja.com

PowerShell以外のコマンドからの出力を抑制しますか?

コマンドを実行しています

hg st

そして、それが$LASTEXITCODE現在のディレクトリでMercurialの可用性を確認します。その出力は気にしませんし、ユーザーに表示したくありません。

すべての出力、成功またはエラーを抑制するにはどうすればよいですか?

MercurialはPowerShellコマンドレットではないため、hg st | Out-Null 動作しません。

24
George Mauer

Out-Nullは、PowerShell以外のコマンドでも問題なく機能します。ただし、STDERRでは出力を抑制せず、STDOUTでのみ出力します。 STDERRの出力も抑制したい場合は、出力をOut-Nullにパイプする前に、そのファイル記述子をSTDOUTにリダイレクトする必要があります。

hg st 2>&1 | Out-Null

2>は、STDERR(ファイル記述子#2)からのすべての出力をリダイレクトします。 &1は、リダイレクトされた出力をSTDOUT(ファイル記述子#1)からの出力とマージします。結合された出力は、STDOUTに出力されます。そこから、パイプは、パイプライン内の次のコマンドのSTDIN(この場合はOut-Null)に入力できます。詳細については、 Get-Help about_Redirection を参照してください。

55
Ansgar Wiechers

できるのは、出力をWrite-Verboseにパイプすることです。その後、-Verboseスイッチを使用してスクリプトを実行することで、必要に応じて出力を確認できます。

ping -n 2 $APP 2>&1 | Write-Verbose
4
Dexter Bacchus
3
Steven Penny