Redirezione dell’output

Output di un comando verso un file

Il risultato di un comando viene inviato verso un file: se il file già esiste viene sovrascritto, il suo contenuto originale è perso per sempre

ls *.txt > lista_file_testo.txt

Posso accodare al file: al file originale vengono aggiunte nuove righe

ls *.txt >> lista_file_testo.txt

Messaggi di errore di un comando su un file

I messaggi di errore sono diretti su un canale diverso dallo standard, per cui:

echo "Elenco dei file di testo" > elenco.log
ls *.txt 2>> elenco.log

cat elenco.log
Elenco dei file di testo
ls: impossibile accedere a *.txt: No such file or directory

Tutto l’output sul file di log

Per redirigere sia il canale di standard output che di error verso uno stesso file di log:

echo "Elenco dei file di testo" > elenco.log
ls *.txt >> elenco.log 2>&1

Output di un comando verso un nuovo processo

Per esempio filtro dall’output del comando ls solo ciò che contiene la stringa “lista”

ls *.txt | grep lista

Può essere utile per implementare un ciclo su ciascun file

ls *.txt | while read FILE
do
   echo "$FILE è un file di testo"
done

Chiudere il canale di output

In uno script, l’esecuzione della seguente riga produce la ridirezione dell’output standard di tutti i successivi comandi, allo stesso modo si può redirigere lo standard error:

exec 1>/dev/null

Lo standard output e error possono essere chiusi con

exec 1>&-
exec 2>&-