Reindirizza stdout e stderr su File

Redirect Stdout Stderr File



Quando reindirizzi l'output di un comando a un file, noterai che i messaggi di errore vengono stampati nella finestra del terminale. Qualsiasi comando eseguito in qualsiasi shell Linux, come bash, utilizza tre normali flussi di I/O. Un descrittore di file numerico viene utilizzato per rappresentare ogni flusso.

  • Il flusso di input standard (stdin): 0
  • Il flusso di output standard (stdout): 1
  • Il flusso di errore standard (stderr): 2

In questo post, coglieremo le informazioni che derivano dal reindirizzamento di stdout e stderr su file.







Uscita standard (stdout):

Ogni sistema operativo basato su Linux ha la convinzione di un posto predefinito per il comando eseguito. Tutti si riferiscono a questa nozione come stdout o output standard per renderlo più semplice. La tua shell Bash o Zsh è costantemente alla ricerca della posizione di output predefinita. Quando la shell rileva un nuovo output, lo visualizza sullo schermo del terminale affinché tu lo possa vedere. Altrimenti, invierà l'output alla sua posizione predefinita.



Errore standard (stderr):

L'errore standard o stderr è simile all'input e all'output standard, ma viene utilizzato per memorizzare i messaggi di errore. L'errore standard può essere reindirizzato alla riga di comando o a un file utilizzando un terminale. Se desideri registrare o archiviare messaggi in un file di registro separato o nascondere i messaggi di errore, reindirizzare stderr ti aiuterà. Ora passiamo al lato pratico del reindirizzamento stdout e stderr.



Reindirizzare stdout e stderr in un file:

Poiché il reindirizzamento è un metodo per acquisire l'output di un programma e inviarlo come input a un altro comando o file. I flussi di I/O possono essere reindirizzati mettendo in uso l'operatore n>, dove n è il numero del descrittore di file. Per reindirizzare stdout, usiamo 1> e per stderr viene aggiunto 2> come operatore.





Abbiamo creato un file chiamato sample.txt per memorizzare l'output reindirizzato nella nostra directory corrente.



Il (comando > file) è considerato come il classico operatore di reindirizzamento che reindirizza solo lo standard output con l'errore standard mostrato nel terminale. Dimostreremo anche diverse opzioni per reindirizzare stderr.

Reindirizzare stderr e stdout in file separati:

Di seguito è riportata la sintassi del comando per reindirizzare stdout e stderr a file separati.

comando >fuori2>errore

Il comando indicato di seguito reindirizzerà l'output al file out e i messaggi di errore al file di errore.

$gattocampione.txt>fuori2>errore

Reindirizzamento da stderr a stdout:

È pratica comune reindirizzare lo stderr con l'output standard di un programma per archiviare tutto in un unico file. Ecco la sintassi del comando per reindirizzare stderr a stdout:

comando >fuori2> &1$ls >filecampione.txt2> &1

$gattofilecampione.txt

> out reindirizza lo stdout a samplefile.txt e 2>&1 reindirizzerà lo stderr alla posizione corrente di stdout.

Se stderr viene reindirizzato prima a stdout, utilizzare il comando indicato di seguito per reindirizzare lo stdout a un file.

comando 2> &1 > file$ls -al 2> &1 >filecampione.txt

$gattofilecampione.txt

&> viene utilizzato anche per la stessa funzionalità eseguita da 2>&1.

comando &> file$ls &>filecampione.txt

$gattofilecampione.txt

Reindirizzare stdout e stderr in un singolo file:

Tutte le shell non supportano questo reindirizzamento del modulo, ma bash e Zsh lo supportano. Stdout e stderr possono essere reindirizzati utilizzando la seguente sintassi.

comando &>fuori$gattocampione.txt&>fuori

Nella prossima sezione dell'articolo, esamineremo l'esempio separato per il reindirizzamento stdout e stderr.

Reindirizzamento stdout a un file:

Lo standard output è rappresentato da 1 nell'elenco dei numeri dei descrittori di file. Per il comando di reindirizzamento senza alcun numero di descrittore di file, il terminale imposta il suo valore su 1. La sintassi per reindirizzare lo stdout a un file è la seguente:

comando > file

Stiamo usando sample.file per memorizzare l'output standard del comando ls -al

$ls -al >campione.txt

$gattocampione.txt

comando 1> file$ls 1>campione.txt

$gattocampione.txt

Reindirizzare stderr su un file:

Utilizzare l'operatore 2> per reindirizzare lo stderr a un file.

comando 2> file $ls -al 2>campione.txt

Possiamo combinare l'esecuzione di stderr e stdout in un unico comando di reindirizzamento.

comando 2>errore.txt1>output.txt

Nell'esempio riportato di seguito, i messaggi di errore verranno archiviati in error.txt, dove output.txt avrà il suo output standard del comando ls.

$ls 2>errore.txt1>output.txt

$gattooutput.txt

Conclusione:

Avere il concetto di reindirizzamento e descrittori di file per i flussi di I/O è molto prezioso quando si lavora in un terminale Linux. In questo post abbiamo parlato dei normali flussi di I/O, inclusi stdout e stderr. La prima sezione di questo post fornisce informazioni dettagliate sul reindirizzamento, sui flussi di I/O e sul descrittore di file numerico. Successivamente, hai visto l'esempio pratico per varie forme di reindirizzamento stdout e stderr.