Diciamo che eseguo un comando o uno script di shell e mi dà un output. Senza conoscere gli interni di questo comando o script di shell, come si fa a determinare se l'output proveniva da stderr
o stdout
?
Ad esempio,
$ ls -ld /
drwxrwxr-t 35 root admin 1258 Dec 11 19:16 /
contro
ls -ld /test
ls: /test: No such file or directory
Come posso accertare che il primo comando sia stato stampato su stdout
e il secondo a stderr
(è vero?)?
Risposta accettata:
Non c'è modo di dirlo una volta che l'output è già stato stampato. In questo caso, entrambi stdout
e stderr
sono collegati al terminale, quindi le informazioni su quale stream è stato scritto erano già perse quando il testo è apparso sul tuo terminale; sono stati combinati dal programma prima di arrivare al terminale.
Quello che puoi fare, in un caso come quello sopra, sarebbe eseguire il comando con stdout
e stderr
reindirizzato a luoghi diversi e guarda cosa succede. Oppure eseguilo due volte, una volta con stdout
reindirizzato a /dev/null
e una volta con stderr
reindirizzato a /dev/null
, e guarda in quale di questi casi viene visualizzato il testo.
Puoi reindirizzare stdout
a /dev/null
virando >/dev/null
alla fine della riga di comando e puoi reindirizzare stderr
a /dev/null
aggiungendo 2>/dev/null
.