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

62 lines
2.3 KiB
Markdown

# 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:
```bash
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.
```bash
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`:
```bash
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:
```bash
wc -c <<< "Quanti caratteri in questa stringa?"
36
```
Le stringhe contenenti spazi devono essere racchiuse tra virgolette doppie.