Bash Spiegazione di STDIN, STDOUT e STDERR


Esempio

I comandi hanno un ingresso (STDIN) e due tipi di uscite, uscita standard (STDOUT) e errore standard (STDERR).

Per esempio:

STDIN

root@server~# read
Type some text here

L'input standard viene utilizzato per fornire input a un programma. (Qui stiamo usando la read builtin per leggere una riga da STDIN.)

STDOUT

root@server~# ls file
file

L'output standard viene generalmente utilizzato per l'output "normale" da un comando. Ad esempio, ls elenca i file, quindi i file vengono inviati a STDOUT.

STDERR

root@server~# ls anotherfile
ls: cannot access 'anotherfile': No such file or directory

L'errore standard è (come suggerisce il nome) utilizzato per i messaggi di errore. Poiché questo messaggio non è un elenco di file, viene inviato a STDERR.

STDIN, STDOUT e STDERR sono i tre flussi standard. Sono identificati nella shell da un numero piuttosto che da un nome:

0 = Standard in
1 = Standard out
2 = errore standard

Per impostazione predefinita, STDIN è collegato alla tastiera e sia STDOUT che STDERR appaiono nel terminale. Tuttavia, possiamo reindirizzare STDOUT o STDERR a qualsiasi cosa di cui abbiamo bisogno. Ad esempio, diciamo che è necessario solo lo standard out e tutti i messaggi di errore stampati su errore standard dovrebbero essere soppressi. Questo è quando usiamo i descrittori 1 e 2 .

Reindirizzamento di STDERR a / dev / null
Prendendo l'esempio precedente,

root@server~# ls anotherfile 2>/dev/null
root@server~#

In questo caso, se c'è uno STDERR, verrà reindirizzato a / dev / null (un file speciale che ignora qualsiasi cosa inserito in esso), quindi non si otterrà alcun output di errore sulla shell.