GNU/Linux >> Linux Esercitazione >  >> Linux

Come reindirizzare stderr a stdout in Bash

Quando si reindirizza l'output di un comando a un file o lo si reindirizza a un altro comando, è possibile notare che i messaggi di errore vengono stampati sullo schermo.

In Bash e in altre shell Linux, quando un programma viene eseguito, utilizza tre flussi di I/O standard. Ciascun flusso è rappresentato da un descrittore di file numerico:

  • 0 - stdin , il flusso di input standard.
  • 1 - stdout , il flusso di output standard.
  • 2 - stderr , il flusso di errore standard.

Un descrittore di file è solo un numero che rappresenta un file aperto.

Il flusso di input fornisce informazioni al programma, generalmente digitando sulla tastiera.

L'output del programma va al flusso di input standard e i messaggi di errore vanno al flusso di errore standard. Per impostazione predefinita, sullo schermo vengono stampati sia i flussi di input che quelli di errore.

Reindirizzamento output #

Il reindirizzamento è un modo per acquisire l'output da un programma e inviarlo come input a un altro programma o file.

Gli stream possono essere reindirizzati utilizzando il n> operatore, dove n è il numero del descrittore del file.

Quando n viene omesso, il valore predefinito è 1 , il flusso di output standard. Ad esempio, i due comandi seguenti sono gli stessi; entrambi reindirizzeranno l'output del comando (stdout ) al file.

command > file
command 1> file

Per reindirizzare l'errore standard (stderr ) utilizzare il 2> operatore:

command 2> file

Puoi scrivere entrambi stderr e stdout in due file separati:

command 2> error.txt 1> output.txt

Per evitare che i messaggi di errore vengano visualizzati sullo schermo, reindirizza stderr a /dev/null :

command 2> /dev/null

Reindirizzamento di stderr a stdout #

Quando si salva l'output del programma in un file, è abbastanza comune reindirizzare stderr a stdout in modo da poter avere tutto in un unico file.

Per reindirizzare stderr a stdout e avere messaggi di errore inviati allo stesso file dell'output standard, utilizzare quanto segue:

command > file 2>&1

> file reindirizzare lo stdout in file e 2>&1 reindirizzare lo stderr alla posizione corrente di stdout .

L'ordine di reindirizzamento è importante. Ad esempio, l'esempio seguente reindirizza solo stdout in file . Questo accade perché stderr viene reindirizzato a stdout prima dello stdout è stato reindirizzato a file .

command 2>&1 > file 

Un altro modo per reindirizzare stderr a stdout consiste nell'usare il &> costruire. In Bash &> ha lo stesso significato di 2>&1 :

command &> file

Conclusione #

Comprendere il concetto di reindirizzamenti e descrittori di file è molto importante quando si lavora sulla riga di comando.

Per reindirizzare stderr e stdout , usa 2>&1 o &> costrutti.

Se hai domande o feedback, sentiti libero di lasciare un commento.


Linux
  1. Come reindirizzare solo Stderr?

  2. Come reindirizzare l'output su un file e stdout

  3. Come analizzare un file CSV in Bash?

  4. Come reindirizzare stderr e stdout a file diversi nella stessa riga nello script?

  5. Come reindirizzare l'output di system() su un file?

Come verificare se esiste un file o una directory in Bash

Come leggere i file riga per riga in Bash

Come verificare se un file o una directory esiste in Bash

Come leggere un file riga per riga in Bash

Come utilizzare gli operatori di test di file Bash in Linux

bash:reindirizza stderr al file e stdout + stderr allo schermo