Repository 32bit  Forum
Repository 64bit  Wiki

[BASH] redirect sterr in file e a video

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

[BASH] redirect sterr in file e a video

Messaggioda conraid » dom mag 01, 2011 11:40

Come posso fare per far si che lo stderr venga mostrato a video e rediretto in un file insieme allo stdout (il quale però non deve essere mostrato a video). E' possibile?

In pratica un insieme di questi 2 comandi
Codice: Seleziona tutto
comando &> file
comando 1> /dev/null
Avatar utente
conraid
Staff
Staff
 
Messaggi: 11994
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: [BASH] redirect sterr in file e a video

Messaggioda targzeta » dom mag 01, 2011 12:19

Premesso che io ci ho sempre capito poco del redirect e della duplicazione dei puntatori a file della bash. Sembra che questo comando funzioni:
Codice: Seleziona tutto
comando 2>&1 1> file | tee -a file
speriamo che qualcuno ci chiarisca meglio le idee :D

Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6155
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [BASH] redirect sterr in file e a video

Messaggioda conraid » dom mag 01, 2011 12:24

nel file non compare l'errore
Avatar utente
conraid
Staff
Staff
 
Messaggi: 11994
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: [BASH] redirect sterr in file e a video

Messaggioda targzeta » dom mag 01, 2011 12:28

Strano, a me funziona:
Codice: Seleziona tutto
$> ls . /root/ 2>&1 1>/tmp/casa | tee -a /tmp/casa
ls: impossibile aprire la directory /root/: Permesso negato

$> cat /tmp/casa
.:
totale 33K
 [cut]...
ls: impossibile aprire la directory /root/: Permesso negato
ed ho provato anche più di una volta.

Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6155
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [BASH] redirect sterr in file e a video

Messaggioda targzeta » dom mag 01, 2011 12:30

Magari prova a mettere un '1>>file'. Forse se viene eseguito prima tee, poi il suo output viene eliminato dall'output di '1>'. Potrebbe essere una questione di chi scrive prima nel file tra i due comandi.

Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6155
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [BASH] redirect sterr in file e a video

Messaggioda conraid » dom mag 01, 2011 12:39

spina ha scritto:Magari prova a mettere un '1>>file'. Forse se viene eseguito prima tee, poi il suo output viene eliminato dall'output di '1>'. Potrebbe essere una questione di chi scrive prima nel file tra i due comandi.

Emanuele


così funziona
Avatar utente
conraid
Staff
Staff
 
Messaggi: 11994
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: [BASH] redirect sterr in file e a video

Messaggioda Mario Vanoni » dom mag 01, 2011 13:58

spina ha scritto:Premesso che io ci ho sempre capito poco del redirect e della duplicazione dei puntatori a file della bash. Sembra che questo comando funzioni:
Codice: Seleziona tutto
comando 2>&1 1> file | tee -a file
speriamo che qualcuno ci chiarisca meglio le idee :D

Emanuele

E` sbagliato l'ordine, commando > file 2&1
man 1 bash
Codice: Seleziona tutto
 Note that the order of redirections is significant.  For example, the command

              ls > dirlist 2>&1

       directs both standard output and standard error to the file dirlist, while the command

              ls 2>&1 > dirlist

       directs only the standard output to file dirlist, because the standard error was duplicated as standard output before the standard output was redirected to dirlist.
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: [BASH] redirect sterr in file e a video

Messaggioda targzeta » dom mag 01, 2011 14:05

Sembra in linea con le richieste di conraid. Abbiamo mandato solo l'stdout nel file, poi l'stderr lo abbiamo duplicato e inviato a tee, il quale lo mostra a video e lo appende al file. Non capisco perché dici che è sbagliato l'ordine.

Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6155
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [BASH] redirect sterr in file e a video

Messaggioda Mario Vanoni » dom mag 01, 2011 14:37

spina ha scritto: Non capisco perché dici che è sbagliato l'ordine.

In un comando che deve raccogliere allo stesso tempo stdout e stderr,
a fine riga, e solo a fine riga, viene aggiunto 2>&1
se si pipa, no problems, dopo 2>&1 | tee [-a] altrofile
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: [BASH] redirect sterr in file e a video

Messaggioda targzeta » dom mag 01, 2011 14:51

Mario, io non ti seguo. Il comando funziona, quindi o ci spieghi un modo alternativo per fare la stessa o, magari, ci spieghi bene come funziona la duplicazione dei file descriptor. Il pezzo di man che hai postato casca a pennello, io quel pezzo non l'ho mai capito.

Emanuele
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6155
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: [BASH] redirect sterr in file e a video

Messaggioda Mario Vanoni » dom mag 01, 2011 15:35

spina ha scritto:Il pezzo di man che hai postato casca a pennello, io quel pezzo non l'ho mai capito.

Note that the order of redirections is significant. For example, the command
Notate che l'ordine dell'indirizzo e` importante. P. e.
ls > dirlist 2>&1

directs both standard output and standard error to the file dirlist, while the command
dirige sia stdout che stderr al file dirlist, mentre
ls 2>&1 > dirlist

directs only the standard output to file dirlist, because the standard error was duplicated as standard output before the standard output was redirected to dirlist.
dirige solo stdout al file dirlist, perche` stderr e` stato duplicato quale stdout prima che stdout fosse avviato a dirlist.

Esempio riproducibile:

ls filenonesistente > questotest
errore sullo schermo, il file non esiste
ed il file questotest e` vuoto

ls filenonesistente > questotest 2>&1
nessun errore visibile, lo leggi in questotest

ls filenonesistente 2>&1 > questotest
errore sullo schermo, il file non esiste
ed il file questotest e` vuoto
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: [BASH] redirect sterr in file e a video

Messaggioda conraid » lun mag 02, 2011 10:49

mario, come dici tu però non mostra a video niente, e scrive 2 volte nel file
Avatar utente
conraid
Staff
Staff
 
Messaggi: 11994
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: [BASH] redirect sterr in file e a video

Messaggioda Mario Vanoni » lun mag 02, 2011 14:27

conraid ha scritto:mario, come dici tu però non mostra a video niente, e scrive 2 volte nel file

Corrado, non capisco, quale variante scrive 2 volte nel file?
Mario Vanoni
Iper Master
Iper Master
 
Messaggi: 3174
Iscritto il: lun set 03, 2007 20:20
Località: Cuasso al Monte (VA)
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey

Re: [BASH] redirect sterr in file e a video

Messaggioda conraid » lun mag 02, 2011 14:48

dovevo aver sbagliato io, in pratica avevo lo stdout due volte, e lo stderr una volta. Comunque a video non mostra niente.
Ti mostro un esempio:
Codice: Seleziona tutto
# /root/requiredbuilder -v -p -n -c aMule-2.2.6-i486-2_SBo.tgz 2>&1 1>> prova.tmp | tee -a prova.tmp
ldd /tmp/tmp.9HNmnG/usr/bin/amule: libbfd-2.20.51.0.11.20100810.so => not found
# cat prova.tmp
ldd /tmp/tmp.9HNmnG/usr/bin/amule: libbfd-2.20.51.0.11.20100810.so => not found
atk >= 1.32.0-i486-1
cairo >= 1.10.2-i486-2
cxxlibs >= 6.0.14-i486-1 | gcc-g++ >= 4.5.2-i486-2
expat >= 2.0.1-i486-2
fontconfig >= 2.8.0-i486-1
freetype >= 2.4.4-i486-1
gcc >= 4.5.2-i486-2
gdk-pixbuf2 >= 2.23.3-i486-1
glib2 >= 2.28.6-i486-1
glibc-solibs >= 2.13-i486-4
gtk+2 >= 2.24.4-i486-1
libICE >= 1.0.7-i486-1
libSM >= 1.2.0-i486-1
libX11 >= 1.4.3-i486-2
libXau >= 1.0.6-i486-1
libXcomposite >= 0.4.3-i486-1
libXcursor >= 1.1.11-i486-1
libXdamage >= 1.1.3-i486-1
libXdmcp >= 1.1.0-i486-1
libXext >= 1.2.0-i486-1
libXfixes >= 5.0-i486-1
libXi >= 1.4.2-i486-1
libXinerama >= 1.1.1-i486-1
libXrandr >= 1.3.1-i486-1
libXrender >= 0.9.6-i486-1
libXxf86vm >= 1.1.1-i486-1
libjpeg >= v8a-i486-1
libpng >= 1.4.5-i486-1
libtiff >= 3.9.4-i486-2
libxcb >= 1.7-i486-1
pango >= 1.28.4-i486-1
perl >= 5.12.3-i486-1
pixman >= 0.20.2-i486-1
util-linux >= 2.19-i486-1
wxgtk >= 2.8.12-i686-1cf
zlib >= 1.2.5-i486-4
# rm prova.tmp
# /root/requiredbuilder -v -p -n -c aMule-2.2.6-i486-2_SBo.tgz 1>> prova.tmp 2>&1 | tee -a prova.tmp
# cat prova.tmp
ldd /tmp/tmp.sxowP9/usr/bin/amule: libbfd-2.20.51.0.11.20100810.so => not found
atk >= 1.32.0-i486-1
cairo >= 1.10.2-i486-2
cxxlibs >= 6.0.14-i486-1 | gcc-g++ >= 4.5.2-i486-2
expat >= 2.0.1-i486-2
fontconfig >= 2.8.0-i486-1
freetype >= 2.4.4-i486-1
gcc >= 4.5.2-i486-2
gdk-pixbuf2 >= 2.23.3-i486-1
glib2 >= 2.28.6-i486-1
glibc-solibs >= 2.13-i486-4
gtk+2 >= 2.24.4-i486-1
libICE >= 1.0.7-i486-1
libSM >= 1.2.0-i486-1
libX11 >= 1.4.3-i486-2
libXau >= 1.0.6-i486-1
libXcomposite >= 0.4.3-i486-1
libXcursor >= 1.1.11-i486-1
libXdamage >= 1.1.3-i486-1
libXdmcp >= 1.1.0-i486-1
libXext >= 1.2.0-i486-1
libXfixes >= 5.0-i486-1
libXi >= 1.4.2-i486-1
libXinerama >= 1.1.1-i486-1
libXrandr >= 1.3.1-i486-1
libXrender >= 0.9.6-i486-1
libXxf86vm >= 1.1.1-i486-1
libjpeg >= v8a-i486-1
libpng >= 1.4.5-i486-1
libtiff >= 3.9.4-i486-2
libxcb >= 1.7-i486-1
pango >= 1.28.4-i486-1
perl >= 5.12.3-i486-1
pixman >= 0.20.2-i486-1
util-linux >= 2.19-i486-1
wxgtk >= 2.8.12-i686-1cf
zlib >= 1.2.5-i486-4


io voglio la prima situazione. A video solo lo stderr, in un file stderr e stdout
Avatar utente
conraid
Staff
Staff
 
Messaggi: 11994
Iscritto il: mer lug 13, 2005 23:00
Località: Livorno
Nome Cognome: Corrado Franco
Slackware: current

Re: [BASH] redirect sterr in file e a video

Messaggioda masalapianta » lun mag 02, 2011 15:06

Mario Vanoni ha scritto:
spina ha scritto:Premesso che io ci ho sempre capito poco del redirect e della duplicazione dei puntatori a file della bash. Sembra che questo comando funzioni:
Codice: Seleziona tutto
comando 2>&1 1> file | tee -a file
speriamo che qualcuno ci chiarisca meglio le idee :D

Emanuele

E` sbagliato l'ordine, commando > file 2&1

no, l'ordine è giusto: se apri il file con quel fd prima di duplicarlo, anche il fd duplicato sarà associato a quel file, con il risultato che sia stdout che stderr finiranno nel file, mentre il risultato voluto è infilare stdout nel file e mandare stderr sul terminale (e successivamente in pipe a tee)
Avatar utente
masalapianta
Iper Master
Iper Master
 
Messaggi: 2775
Iscritto il: dom lug 24, 2005 23:00
Località: Roma
Nome Cognome: famoso porco
Kernel: uname -r
Desktop: awesome
Distribuzione: Debian

Prossimo

Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti