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 .