🔧 Lezione 11: Redirezioni e pipe avanzate

Terminale che mostra comandi con redirezioni e pipe
Controllare e manipolare il flusso dei dati in shell come un professionista.

⏱️ Tempo stimato di lettura: 15 minuti
🧩 Difficoltà: Intermedio
🎯 Obiettivi specifici:

  • Comprendere le redirezioni avanzate di input/output.
  • Utilizzare pipe in combinazioni complesse.
  • Imparare a gestire stderr e stdout separatamente.
  • Utilizzare costrutti come process substitution e tee.

Redirezioni e pipe avanzate in BASH

Le redirezioni e pipe avanzate sono strumenti potenti che permettono di manipolare il flusso di dati tra comandi. In questa lezione scopriremo come andare oltre la semplice pipe (|) o redirezione (>), per costruire pipeline robuste e personalizzate.

🔄 Teoria: redirezioni complesse

Nel mondo BASH, ogni processo ha accesso a tre flussi:

  • stdin (0): input standard
  • stdout (1): output standard
  • stderr (2): output di errore

Ecco alcune redirezioni avanzate:

  • command > file 2>&1 → redirige sia stdout che stderr su un file
  • command 2> error.log → stderr viene salvato separatamente
  • command > output.log 2> error.log → separa stdout e stderr in due file diversi
  • command &> all.log → redirige tutto (shorthand per > all.log 2>&1)

Per ulteriori dettagli consulta la documentazione ufficiale di GNU Bash sulle redirezioni.

🔁 Pipe avanzate

La pipe standard (|) prende l’output di un comando e lo passa all’input del successivo. Ma possiamo:

  • Usare tee per duplicare l’output: command | tee log.txt | another_command
  • Usare |& per passare sia stdout che stderr: command |& grep error
  • Combinare pipe multiple: cmd1 | cmd2 | cmd3

🔄 Process substitution

Una delle tecniche più avanzate è la sostituzione di processo:

diff <(ls dir1) <(ls dir2)

Il comando diff confronta direttamente l’output di due comandi.

🔶 Esempio pratico

Supponiamo di voler controllare un log e filtrare gli errori:

grep -i error app.log | tee errori.log | wc -l

Questo comando:

  • cerca la parola “error” (case insensitive) in app.log
  • scrive il risultato in errori.log
  • conta quante righe contengono errori

📚 Glossario tecnico

  • stderr: Flusso di output per i messaggi di errore.
  • tee: Comando che duplica l’output.
  • process substitution: Tecnica per passare output come file temporanei ai comandi.

📝 Esercizio finale

Scrivi un comando che:

  1. Legga un file input.txt
  2. Filtri le righe contenenti la parola “fail”
  3. Salvi l’output in failures.log
  4. Conti quante righe contengono “fail” e stampi il numero

🧠 Quiz finale

Domanda: Qual è il significato di 2>&1 in una redirezione?

A) Redirige stdout su stderr
B) Redirige stderr su stdout
C) Redirige entrambi su un file
D) Nessuna delle precedenti

Risposta corretta: B


❓ FAQ

1. Posso redirigere stderr su un file e stdout su un altro?
Sì, usa command > out.log 2> err.log

2. Cosa fa |&?
Passa sia stdout che stderr nella pipe successiva.

3. tee sovrascrive o aggiunge al file?
Di default sovrascrive, ma con -a aggiunge.

4. Posso usare pipe dentro uno script?
Certo, pipe e redirezioni funzionano anche negli script.

5. diff <(cmd1) <(cmd2) funziona sempre?
Funziona se il comando supporta file come input.


🔁 Collegamento alla lezione successiva

🔷 Lezione 12/24: Variabili d’ambiente e personalizzazione Bash

📢 Hai dubbi su redirezioni o pipe? Scrivilo nei commenti!

🔟 Gestire processi e background con Bash su Linux

GNU Bash Reference Manual – Redirections

Lascia un commento