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.