2013-05-24 8 views
17

Sono in esecuzione di un comandoSopprime l'output dai comandi non PowerShell?

hg st 

e quindi il controllo è $LASTEXITCODE per verificare la disponibilità del mercuriale nella directory corrente. Non mi interessa il suo output e non voglio mostrarlo ai miei utenti.

Come faccio a eliminare tutte le emissioni, il successo o un errore?

Dato che Mercurial non è un PowerShell commandlet hg st | Out-Null non funziona.

risposta

47

Out-Null funziona bene con i comandi non PowerShell. Tuttavia, non sopprime l'output su STDERR, solo su STDOUT. Se si desidera eliminare output sul STDERR pure si deve reindirizzare che descrittore di file per STDOUT alla connessione l'output in Out-Null:

hg st 2>&1 | Out-Null 

2> reindirizza tutto l'output da STDERR (descrittore di file # 2). &1 unisce l'output reindirizzato con l'output da STDOUT (descrittore di file n. 1). L'uscita combinata viene quindi stampata a STDOUT da dove il tubo può alimentare in STDIN del comando successivo nella pipline (in questo caso Out-Null). Vedere Get-Help about_Redirection per ulteriori informazioni.

+0

impressionante. Che funzioni. Puoi spiegare cosa significa in realtà la sintassi '2> & 1'? –

+0

'2> & 1' significa" reindirizza l'errore standard nella stessa posizione dell'output standard ". –

+0

@Bill_Stewart Credo sia quello che ho detto, solo che ho indirizzato separatamente entrambe le parti dell'operatore, perché altri flussi potrebbero essere uniti a STDOUT (il flusso di output di successo, in realtà) pure. –

2

può anche fare questo

hg st *> $null 

Powershell suppress console output

+0

Questo non sopprimerà STDERR ad esempio se 'hg' non è installato –

+0

@GeorgeMauer Neppure il mio suggerimento. Gli errori generati dall'ambiente host non vengono reindirizzati. –

+1

Si noti che l'operatore di reindirizzamento '*>' non è disponibile prima di PowerShell v3. –