62 lines
2.3 KiB
Markdown
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.
|