Bashreindirizzamento


Sintassi

  • comando </ path / to / file # Reindirizza l'input standard al file
  • comando> / path / to / file # Redirige l'output standard su flie
  • comando file_descriptor> / path / to / file # Rediretta l'output di file_descriptor in un file
  • comando> & file_descriptor # Reindirizza l'output a file_descriptor
  • comando file_descriptor> & another_file_descriptor # Reindirizza file_descriptor a another_file_descriptor
  • comando <& file_descriptor # Reindirizza file_descriptor allo standard input
  • comando &> / percorso / al / file # Redirige l'output standard e l'errore standard nel file

Parametri

Parametro Dettagli
descrittore di file interno Un numero intero
direzione Uno di > , < o <>
descrittore o percorso del file esterno & seguita da un numero intero di descrittore di file o un percorso.

Osservazioni

I programmi di console UNIX hanno un file di input e due file di output (i flussi di input e output, così come i dispositivi, sono trattati come file dal sistema operativo.) Questi sono in genere la tastiera e lo schermo, rispettivamente, ma alcuni o tutti possono essere reindirizzati venire da - o andare a - un file o un altro programma.

STDIN è un input standard ed è il modo in cui il programma riceve input interattivi. STDIN viene solitamente assegnato il descrittore di file 0.

STDOUT è l'output standard. Tutto ciò che viene emesso su STDOUT è considerato il "risultato" del programma. STDOUT viene solitamente assegnato il descrittore di file 1.

STDERR è dove vengono visualizzati i messaggi di errore. In genere, quando si esegue un programma dalla console, STDERR viene visualizzato sullo schermo ed è indistinguibile da STDOUT . STDERR viene in genere assegnato il descrittore di file 2.

L'ordine di reindirizzamento è importante

command > file 2>&1

Reindirizza entrambi ( STDOUT e STDERR ) al file.

command 2>&1 > file

Reindirizza solo STDOUT , poiché il descrittore di file 2 viene reindirizzato al file indicato dal descrittore di file 1 (che non è ancora il file di file quando viene valutata l'istruzione).

Ogni comando in una pipeline ha il proprio STDERR (e STDOUT ) perché ognuno è un nuovo processo. Ciò può creare risultati sorprendenti se si prevede che un reindirizzamento influenzi l'intera pipeline. Ad esempio questo comando (incluso per la leggibilità):

$ python -c 'import sys;print >> sys.stderr, "Python error!"' \
| cut -f1 2>> error.log

stamperà "Errore Python!" alla console piuttosto che al file di registro. Invece, allegare l'errore al comando che si desidera acquisire:

$ python -c 'import sys;print >> sys.stderr, "Python error!"' 2>> error.log \
| cut -f1 

reindirizzamento Esempi correlati