migliorato il testo
This commit is contained in:
61
lpic/101/016-reindirizzamenti.md
Normal file
61
lpic/101/016-reindirizzamenti.md
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
# 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.
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
# Reindirizzamenti
|
|
||||||
|
|
||||||
In Linux i processi hanno tre canali di comunicazione: `standard input` (`stdin`, il cui *descrittore di file* e'**0**), `standard output` (`stdout`, **1**) e `standard error` (`stderr`, **2**). I canali di comunicazione sono anche accessibili tramite i dispositivi speciali `/dev/stdin`, `/dev/stdout` e `/dev/stderr`.
|
|
||||||
|
|
||||||
## Descrittore di file
|
|
||||||
|
|
||||||
Il simbolo `>` ad esempio permette di reindirizzare lo `stdout` di un processo su un file,
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cat /proc/cpuinfo > cpu.txt
|
|
||||||
```
|
|
||||||
Per impostazione predefinita, viene reindirizzato solo il contenuto che arriva a *stdout*. Questo perche' il valore numerico del descrittore di file deve essere specificato prima del simbolo `>`. Se non specificato, Bash reindirizza lo *stdout*. Pertanto, usare `>` equivale a scrivere `1>`. Per catturare il contenuto di `stderr` bisognerebbe usare il simbolo `2>`. La destinazione di un descrittore di file e' rappresentata dal simbolo `>&`. Per esempio, `1>&2` reindirizza *stdout* a *stderr*.
|
|
||||||
|
|
||||||
Sia *stderr* che *stdout* vengono reindirizzati alla stessa destinazione con `&>`. Per scartare l'output di un comando o di un file, basta reindirizzarne il contenuto al file speciale `/dev/null`.
|
|
||||||
|
|
||||||
Il simbolo `<` viene utilizzato per reindirizzare il contenuto di un file allo *stdin* di un processo. I dati scorrono da destra a sinistra.
|
|
||||||
|
|
||||||
## Here document e Here String
|
|
||||||
|
|
||||||
Il reindirizzamento del *Here document* consente di digitare del testo su piu' righe che verra' utilizzato come contenuto:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cat > file << EOF
|
|
||||||
> riga 1
|
|
||||||
> riga 2
|
|
||||||
> riga 3
|
|
||||||
> EOF
|
|
||||||
|
|
||||||
cat file
|
|
||||||
riga 1
|
|
||||||
riga 2
|
|
||||||
riga 3
|
|
||||||
|
|
||||||
wc -c << EOF
|
|
||||||
> Quanti caratteri ci sono in questo documento?
|
|
||||||
> Non ne ho idea, ma scopriamolo!
|
|
||||||
> EOF
|
|
||||||
78
|
|
||||||
|
|
||||||
cat << EOF > file
|
|
||||||
> riga 1
|
|
||||||
> EOF
|
|
||||||
```
|
|
||||||
|
|
||||||
La modalita' di inserimento terminera' non appena sara' inserito il termine di *fine file* (nell'esempio il carattere `EOF`).
|
|
||||||
|
|
||||||
Il metodo *Here string* e' molto simile, ma viene utilizzato il simbolo `>>>` e interessa solo una singola riga : `wc -c <<< "Quanti caratteri in questa stringa?"`. Le stringhe con spazi devono essere racchiuse tra `""`
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sha1sum <<< $USER
|
|
||||||
06ad4c901e9f7dfdbf1bc5b01fe5d690686b54a4 -
|
|
||||||
```
|
|
||||||
Reference in New Issue
Block a user