unito differenti repository
This commit is contained in:
52
lpic/101/016_reindirizzamenti.md
Normal file
52
lpic/101/016_reindirizzamenti.md
Normal file
@ -0,0 +1,52 @@
|
||||
# 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