Avanti Indietro Indice

3. Tutto sulla redirezione

3.1 Teoria e riferimento veloce

Esistono 3 descrittori di file: stdin, stdout e stderr (std=standard).

Basilarmente tu puoi:

  1. redirigere stdout verso un file
  2. redirigere stderr verso un file
  3. redirigere stdout verso stderr
  4. redirigere stderr verso stdout
  5. redirigere stderr e stdout verso un file
  6. redirigere stderr e stdout verso stdout
  7. redirigere stderr e stdout verso stderr
1 'rappresenta' stdout e 2 stderr.

Una piccola nota per vedere queste cose: con il comando less puoi visualizzare sia stdout (che resterà nel buffer) che lo stderr che verrà stampato sullo schermo, ma eliminato non appena tenterai di 'sfogliare' il buffer.

3.2 Esempio: stdout verso file

Questo farà sì che l'output di un programma venga scritto su un file.

        ls -l > ls-l.txt
        
Qui, un file chiamato 'ls-l.txt' verrà creato e conterrà ciò che vedresti sullo schermo digitando il comando 'ls -l' ed eseguendolo.

3.3 Esempio: stderr verso file

Questo farà sì che l'output di stderr di un programma venga scritto su un file.

        grep da * 2> grep-errors.txt
        
Qui, un file chiamato 'grep-errors.txt' sarà creato e conterrà ciò che vedresti come porzione di stderr dell'output del comando 'grep da *'.

3.4 Esempio: stdout verso stderr

Questo farà sì che l'output di stderr di un programma venga scritto sul medesimo filedescriptor di stdout.

        grep da * 1>&2 
        
Qui, la porzione di stdout del comando è inviata a stderr, puoi accorgertene in diversi modi.

3.5 Esempio: stderr verso stdout

Questo farà sì che l'output di stderr di un programma venga scritto sul medesimo filedescriptor di stdout.

        grep * 2>&1
        
Qui, la porzione di stderr del comando è inviata a stdout, se fai una pipe verso less, noterai che righe le quali normalmente 'scomparirebbero' (poiché sono scritte su stderr) ora vengono tenute (perché si trovano su stdout).

3.6 Esempio: stderr e stdout verso file

Questo porterà ogni output di un programma su un file. Può risultare a volte utile per cron, se vuoi che un comando passi in assoluto silenzio.

        rm -f $(find / -name core) &> /dev/null 
        
Questo (pensando a cron) eliminerà ogni file chiamato 'core' in qualsiasi directory. Osserva che dovresti essere piuttosto sicuro di cosa sta facendo un comando, prima di eliminarne ogni output.
Avanti Indietro Indice