Bash Reindirizzamento di STDOUT e STDERR


Esempio

I descrittori di file come 0 e 1 sono puntatori. Modifichiamo ciò che i descrittori di file puntano con il reindirizzamento. >/dev/null indica 1 punti a /dev/null .

Innanzitutto puntiamo 1 ( STDOUT ) a /dev/null quindi il punto 2 ( STDERR ) a qualunque punto 1 .

# STDERR is redirect to STDOUT: redirected to /dev/null,
# effectually redirecting both STDERR and STDOUT to /dev/null
echo 'hello' > /dev/null 2>&1
4.0

Questo può essere ulteriormente ridotto al seguente:

echo 'hello' &> /dev/null

Tuttavia, questa forma può essere indesiderabile nella produzione se la compatibilità della shell è un problema in quanto è in conflitto con POSIX, introduce un'ambiguità di parsing e le shell senza questa caratteristica la interpretano male:

# Actual code
echo 'hello' &> /dev/null
echo 'hello' &> /dev/null 'goodbye'

# Desired behavior
echo 'hello' > /dev/null 2>&1
echo 'hello' 'goodbye' > /dev/null 2>&1

# Actual behavior
echo 'hello' &
echo 'hello' & goodbye > /dev/null

NOTA: &> è noto per funzionare come desiderato sia in Bash che in Zsh.