09 dicembre, 2019
Bash scripts - cose che devo ricordarmi - 6
Reindirizzamento dell'I/O
L'argomento è piuttosto complesso, si trova tutto qui; quello che mi serve è solo una parte, poi se del caso so dove andare a cercare.
Reindirizzare l'input. Il descrittore di input, stdin, è reindirizzabile con <. Esempio, questo è il file 123
$ cat 123
uno
due
tre
$
per visualizzarlo, sostituendo i caratteri in maiuscolo posso usare cat collegato via pipe con tr:
$ cat 123 | tr a-z A-Z
UNO
DUE
TRE
$
ma esiste un modo più semplice, con il reindizzamento dell'input:
$ tr a-z A-Z < 123
UNO
DUE
TRE
$
Ovviamente posso salvare l'output nel file M123:
$ tr a-z A-Z < 123 > M123
$ cat M123
UNO
DUE
TRE
$
Sì con > reindirizzo l'output stdout (1); ma esiste anche stderr (2), da approfondire. Con Python creo uno script minimo per scrivere sui due descrittori (o23.py)
from sys import stderr
print ('questo su stdout')
print ('questo su stderr', file=stderr)
eseguendolo ottengo:
$ py3 o23.py
questo su stdout
questo su stderr
$
dove l'output dei due descrittori è conpresente, indistinguibile, ma posso reindirizzare:
$ py3 o23.py > d2
questo su stderr
$ cat d2
questo su stdout
$
in questo modo stdout è finito nel file d2; invece
$ py3 o23.py 2> d3
questo su stdout
$ cat d3
questo su stderr
$
reindirizza stderr sul file d3; posso inoltre reindirizzare entrambi i descrittori con
$ py3 o23.py &> d23
$ cat d23
questo su stderr
questo su stdout
$
posso esplicitare il descrittore di stderr anche in questo modo (sconsigliato)
$ py3 o23.py 2&> d24
$ cat d24
questo su stderr
questo su stdout
$
Con > il file viene creato e se presente riscritto. Per appendere (invece di riscrivere) basta usare >>. Se il fle non esiste lo crea.
$ py3 o23.py &>> d25
$ py3 o23.py &>> d25
$ cat d25
questo su stderr
questo su stdout
questo su stderr
questo su stdout
$
C'è un file speciale, un buco nero|black hole: /dev/null accetta l'output ma non memorizza, utile spesse volte.
OK! C'è ancora una cosa, che non so se serve, non so se l'ho mai usata, l'here document, a volte indicato come heredoc, <<, ecco una variante dell'esercizio iniziale, conversione in maiuscolo:
$ tr a-z A-Z >> Mhd << EOF
> uno
> due
> tre
> EOF
$ cat Mhd
UNO
DUE
TRE
$
il ciclo prosegue fino al delimitatore (EOF in questo caso, usuale per end of file).
🔴🔵
Iscriviti a:
Commenti sul post (Atom)
Nessun commento:
Posta un commento