2013-05-24 6 views
17

Używam polecenieUkrywanie danych wyjściowych z poleceń innych niż PowerShell?

hg st 

a następnie sprawdzanie to $LASTEXITCODE celu sprawdzenia dostępności mercurial w bieżącym katalogu. Nie dbam o jego wyniki i nie chcę pokazywać tego moim użytkownikom.

Jak wyłączyć WSZYSTKIE wyjście, sukces lub błąd?

Ponieważ mercurial nie jest poleceniem PowerShell, hg st | Out-Null nie działa.

Odpowiedz

47

Out-Null działa dobrze przy poleceniach innych niż PowerShell. Jednak nie tłumi on wyjścia na STDERR, tylko na STDOUT. Jeśli chcesz, aby stłumić wyjście na STDERR także trzeba przekierować że deskryptor do STDOUT przed potokiem wyjście do Out-Null:

hg st 2>&1 | Out-Null 

2> przekierowuje wszystkie wyjścia z STDERR (plik deskryptora 2 #). &1 scala przekierowane wyjście z wynikiem z STDOUT (deskryptor pliku # 1). Połączone wyjście jest następnie drukowane do STDOUT, z którego rura może podawać je do STDIN następnego polecenia w rurociągu (w tym przypadku Out-Null). Aby uzyskać więcej informacji, patrz Get-Help about_Redirection.

+0

niesamowite. To działa. Czy możesz wyjaśnić, co właściwie oznacza składnia '2> i 1'? –

+0

'2> & 1' oznacza" przekierowanie standardowego błędu do tego samego miejsca, co standardowe wyjście. " –

+0

@Bill_Stewart Wierzę, że to jest to, co powiedziałem, tylko że odniosłem się do obu części operatora osobno, ponieważ inne strumienie mogą być również połączone ze STDOUT (strumień wyjściowy sukcesu, faktycznie). –

2

można również zrobić to

hg st *> $null 

Powershell suppress console output

+0

To nie powstrzyma STDERR, na przykład, jeśli 'hg' nie jest zainstalowany –

+0

@GeorgeMauer Ani moja sugestia. Błędy zgłaszane przez środowisko hosta nie są przekierowywane. –

+1

Należy zauważyć, że operator przekierowania '*>' nie jest dostępny przed PowerShell v3. –