2.1 KiB
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,
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:
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 ""
sha1sum <<< $USER
06ad4c901e9f7dfdbf1bc5b01fe5d690686b54a4 -