Files
learning/lpic/101/016-reindirizzamenti.md
2025-08-30 21:18:57 +02:00

2.3 KiB

Reindirizzamenti

In Linux, ogni processo dispone di tre canali di comunicazione standard:

  • standard input (stdin, il cui descrittore di file é 0)
  • standard output (stdout, il cui descrittore di file é 1)
  • standard error (stderr, il cui descrittore di file é 2)

Tali canali sono accessibili anche tramite i dispositivi speciali /dev/stdin, /dev/stdout e /dev/stderr.

Descrittore di file

Il simbolo > consente di reindirizzare lo stdout di un processo verso un file. Ad esempio, il comando:

cat /proc/cpuinfo > cpu.txt

reindirizza il contenuto di stdout nel file cpu.txt. Per impostazione predefinita, solo il contenuto che inviato a stdout viene reindirizzato. Questo avviene perché il valore numerico del descrittore di file deve essere specificato prima del simbolo >. Se non viene specificato, Bash reindirizza automaticamente stdout. Pertanto, utilizzare > equivale a scrivere 1>. Per catturare il contenuto di stderr, è necessario utilizzare il simbolo 2>. La destinazione di un descrittore di file è rappresentata dal simbolo >&. Ad esempio, 1>&2 reindirizza stdout a stderr.

Sia stderr che stdout possono essere reindirizzati alla stessa destinazione utilizzando &>. Per scartare l'output di un comando o di un file, è possibile reindirizzarne il contenuto al file speciale /dev/null.

Il simbolo < è utilizzato per reindirizzare il contenuto di un file verso lo stdin di un processo. In questo caso, i dati scorrono da destra a sinistra.

Here Document e Here string

Il reindirizzamento tramite Here Document consente di inserire del testo su più righe, che verrà utilizzato come contenuto.

cat > file << EOF
> riga 1
> riga 2
> riga 3
> EOF

cat file
riga 1
riga 2
riga 3

La modalità di inserimento termina non appena viene inserito il termine di fine file, che nell'esempio è rappresentato dal carattere EOF.

È possibile utilizzare il Here document anche per fornire input a comandi come wc:

wc -c << EOF
> Quanti caratteri ci sono in questo documento?
> Non ne ho idea, ma scopriamolo!
> EOF
78

Il metodo Here String è simile, ma utilizza il simbolo <<< e si applica solo a una singola riga. Ad esempio:

wc -c <<< "Quanti caratteri in questa stringa?"
36

Le stringhe contenenti spazi devono essere racchiuse tra virgolette doppie.