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.