Re: [deb-cat] logsave mes net

2015-10-17 Conversa Simó Albert i Beltran
Si poguéssim veure el codi del que estas fent podríem opinar amb
propietat.

Respecte el codi de retorn i la canalització a bash:

false | true
echo ${PIPESTATUS[0]} ${PIPESTATUS[1]}

o bé:

set -o pipefail
false | true || echo ko


Respecte fer una bitàcola (es diu així?), jo acostumo a usar el logger
que ja s'ha comentat pots veure'n un exemple a:
https://gitlab.com/dtv3/dtv3/blob/master/dtv3#L145


signature.asc
Description: PGP signature


Re: [deb-cat] logsave mes net

2015-10-17 Conversa Narcis Garcia
Uff, he estat utilitzant el logsave però, és clar, aquestes utilitats
externes no són útils a l'hora de cridar funcions del mateix ShellScript.
En aquests casos faig servir:
eval Funció | tee -a bitacola.log

El problema és que quan hi ha canalitzacions (|) només arriba el
resultat de sortida (exit code) de la última comanda (en aquest cas tee)
i no m'entero de si la funció ha resultat en algun error.

Ara estic intentant que cada funció exporti una variable amb el resultat
de sortida, tot i que serà un embolic amb crides concurrents.


El 12/10/15 a les 09:23, Narcis Garcia ha escrit:
> Gràcies; el «script» és molt interessant per «gravar» de fons tant
> execucions com sessions interactives d'usuari.
> De tota manera, tot i que ofereix el paràmetre --quiet, també enregistra
> capçaleres seves.
> 
> Com que ja he implementat el logsave, segueixo amb aquest.
> El què jo faig és, en un procés molt llarg, que un programet principal
> va fent crides a N processos secundaris. Per terminal el programet
> principal va informant de la tasca que està fent (sense més detalls) i
> el percentatge que porta. En canvi la sortida dels processos secundaris
> s'oculta quan tot va bé i s'enregistra a diverses bitàcoles (.log) quan
> han resultat en error.
> 
> Tot això és pel programa Peinddd.
> 
> 
> El 10/10/15 a les 19:07, Jordi Funollet ha escrit:
>> Potser et serveix el programa 'script' .
>>
> 



Re: [deb-cat] logsave mes net

2015-10-17 Conversa Narcis Garcia
Em sembla que les matrius com PIPESTATUS només són suportades per Bash,
i no per altres intèrprets de ShellScript. Intento fer programets el més
portables possibles.

Un exemple de programet per qual recollir el codi de sortida:

#!/bin/sh
LaFuncio ()
{
ls /inexistent
Resultat=$?
return $Resultat
}
LaFuncio 2>&1 | tee -a /var/log/labitacola.log
Resultat=$?
if [ $Resultat -ne 0 ] ; then echo "Problema" ; fi
exit $Resultat


El 17/10/15 a les 11:41, Simó Albert i Beltran ha escrit:
> Si poguéssim veure el codi del que estas fent podríem opinar amb
> propietat.
> 
> Respecte el codi de retorn i la canalització a bash:
> 
> false | true
> echo ${PIPESTATUS[0]} ${PIPESTATUS[1]}
> 
> o bé:
> 
> set -o pipefail
> false | true || echo ko
> 
> 
> Respecte fer una bitàcola (es diu així?), jo acostumo a usar el logger
> que ja s'ha comentat pots veure'n un exemple a:
> https://gitlab.com/dtv3/dtv3/blob/master/dtv3#L145
> 



Re: [deb-cat] logsave mes net

2015-10-17 Conversa Ernest Adrogué
2015-10-17, 10:45 (+0200); Narcis Garcia escriu:
> El problema és que quan hi ha canalitzacions (|) només arriba el
> resultat de sortida (exit code) de la última comanda (en aquest cas tee)
> i no m'entero de si la funció ha resultat en algun error.

Pots utilitzar un fitxer fifo en lloc de la canalització; per exemple

#!/bin/sh

fifo="$(mktemp -u)" || exit

trap "rm -f '$fifo'" 0
trap "exit 2" 1 2 3 15

mkfifo "$fifo" || exit

tee -a ./log <"$fifo" &

echo 1
echo 2 > "$fifo"
echo 3 > "$fifo"
echo 4
echo 5 > "$fifo"

si mires al fitxer ./log conté

2
3
5

que és correcte, en canvi a la sortida estàndard em surt desordenat

1
4
2
3
5

Si algú sap com resoldre aquest detall podria ser una solució.



Re: [deb-cat] logsave mes net

2015-10-17 Conversa Roger Sicart
Bones,

Jo per capturar la sortida i el codi de retorn de la comanda normalment
utilitzo variables i subshells.
Si no m'equivoco ni en shell ni en bash hi ha la paraula clau "return", per
això es fa un "echo" o es captura el codi de retorn en funció de les teves
necessitats, perquè et podria interessar més formatejar la sortida del
subshell (per exemple, amb sed o awk) abans d'enviar-la cap al fitxer de
log:

#!/bin/sh
LaFuncio ()
{
ls /inexistent
Resultat=$?
echo $Resultat
}
sortida=$(LaFuncio 2>&1)
Resultat=$?
# aquí pots treballar la sortida, per exemple
echo $sortida | sed -e 's/ /\t/g'  | tee -a /var/log/labitacola.log
if [ "$Resultat" != "0" ] ; then echo "Problema" ; fi
exit $Resultat


Salut, bon dissabte.


On Saturday, 17 October 2015, Narcis Garcia  wrote:

> Em sembla que les matrius com PIPESTATUS només són suportades per Bash,
> i no per altres intèrprets de ShellScript. Intento fer programets el més
> portables possibles.
>
> Un exemple de programet per qual recollir el codi de sortida:
>
> #!/bin/sh
> LaFuncio ()
> {
> ls /inexistent
> Resultat=$?
> return $Resultat
> }
> LaFuncio 2>&1 | tee -a /var/log/labitacola.log
> Resultat=$?
> if [ $Resultat -ne 0 ] ; then echo "Problema" ; fi
> exit $Resultat
>
>
> El 17/10/15 a les 11:41, Simó Albert i Beltran ha escrit:
> > Si poguéssim veure el codi del que estas fent podríem opinar amb
> > propietat.
> >
> > Respecte el codi de retorn i la canalització a bash:
> >
> > false | true
> > echo ${PIPESTATUS[0]} ${PIPESTATUS[1]}
> >
> > o bé:
> >
> > set -o pipefail
> > false | true || echo ko
> >
> >
> > Respecte fer una bitàcola (es diu així?), jo acostumo a usar el logger
> > que ja s'ha comentat pots veure'n un exemple a:
> > https://gitlab.com/dtv3/dtv3/blob/master/dtv3#L145
> >
>
>

-- 
--

R. Sicart


Re: [deb-cat] logsave mes net

2015-10-17 Conversa Narcis Garcia
La cosa està en què la funció produeix molta informació textual (tant
stdout com stderr) per desar en una bitàcola, que és per això que es fa
servir el "tee". Sinó, seria ben senzill emetre només el numeret de sortida.
return sempre ha funcionat a les funcions.

Provisionalment, estic utilitzant un fitxer normal i corrent, només per
aquests casos:

#!/bin/sh
LaFuncio ()
{
ls /inexistent
Resultat=$?
echo $Resultat > /tmp/LaFuncio.resultat.num
return $Resultat
}
LaFuncio 2>&1 | tee -a /var/log/labitacola.log
Resultat=$(cat /tmp/LaFuncio.resultat.num)
rm /tmp/LaFuncio.resultat.num
if [ $Resultat -ne 0 ] ; then echo "Problema" ; fi
exit $Resultat


El 17/10/15 a les 14:09, Roger Sicart ha escrit:
> 
> Bones,
> 
> Jo per capturar la sortida i el codi de retorn de la comanda normalment
> utilitzo variables i subshells.
> Si no m'equivoco ni en shell ni en bash hi ha la paraula clau "return",
> per això es fa un "echo" o es captura el codi de retorn en funció de les
> teves necessitats, perquè et podria interessar més formatejar la sortida
> del subshell (per exemple, amb sed o awk) abans d'enviar-la cap al
> fitxer de log:
> 
> #!/bin/sh
> LaFuncio ()
> {
> ls /inexistent
> Resultat=$?
> echo $Resultat
> }
> sortida=$(LaFuncio 2>&1)
> Resultat=$?
> # aquí pots treballar la sortida, per exemple
> echo $sortida | sed -e 's/ /\t/g'  | tee -a /var/log/labitacola.log
> if [ "$Resultat" != "0" ] ; then echo "Problema" ; fi
> exit $Resultat
> 
> 
> Salut, bon dissabte.
> 
> 
> On Saturday, 17 October 2015, Narcis Garcia  > wrote:
> 
> Em sembla que les matrius com PIPESTATUS només són suportades per Bash,
> i no per altres intèrprets de ShellScript. Intento fer programets el més
> portables possibles.
> 
> Un exemple de programet per qual recollir el codi de sortida:
> 
> #!/bin/sh
> LaFuncio ()
> {
> ls /inexistent
> Resultat=$?
> return $Resultat
> }
> LaFuncio 2>&1 | tee -a /var/log/labitacola.log
> Resultat=$?
> if [ $Resultat -ne 0 ] ; then echo "Problema" ; fi
> exit $Resultat
> 
> 
> El 17/10/15 a les 11:41, Simó Albert i Beltran ha escrit:
> > Si poguéssim veure el codi del que estas fent podríem opinar amb
> > propietat.
> >
> > Respecte el codi de retorn i la canalització a bash:
> >
> > false | true
> > echo ${PIPESTATUS[0]} ${PIPESTATUS[1]}
> >
> > o bé:
> >
> > set -o pipefail
> > false | true || echo ko
> >
> >
> > Respecte fer una bitàcola (es diu així?), jo acostumo a usar el logger
> > que ja s'ha comentat pots veure'n un exemple a:
> > https://gitlab.com/dtv3/dtv3/blob/master/dtv3#L145
> >
> 
> 
> 
> -- 
> --
> 
> R. Sicart
> 



Re: [deb-cat] logsave mes net

2015-10-12 Conversa Narcis Garcia
Gràcies; el «script» és molt interessant per «gravar» de fons tant
execucions com sessions interactives d'usuari.
De tota manera, tot i que ofereix el paràmetre --quiet, també enregistra
capçaleres seves.

Com que ja he implementat el logsave, segueixo amb aquest.
El què jo faig és, en un procés molt llarg, que un programet principal
va fent crides a N processos secundaris. Per terminal el programet
principal va informant de la tasca que està fent (sense més detalls) i
el percentatge que porta. En canvi la sortida dels processos secundaris
s'oculta quan tot va bé i s'enregistra a diverses bitàcoles (.log) quan
han resultat en error.

Tot això és pel programa Peinddd.


El 10/10/15 a les 19:07, Jordi Funollet ha escrit:
> Potser et serveix el programa 'script' .
> 



Re: [deb-cat] logsave mes net

2015-10-11 Conversa tictacbum
mira't també "logger"

2015-10-10 19:07 GMT+02:00 Jordi Funollet :

> Potser et serveix el programa 'script' .
>
> --
> Jordi Funollet Pujol
> http://www.linkedin.com/in/jordifunollet
>
>


Re: [deb-cat] logsave mes net

2015-10-10 Conversa Jordi Funollet
Potser et serveix el programa 'script' .

-- 
Jordi Funollet Pujol
http://www.linkedin.com/in/jordifunollet



Re: [deb-cat] logsave mes net

2015-10-10 Conversa Roger Sicart
Bones,

Jo provaria de redirigir stderr a /dev/null per veure si el comportament es
el mateix:

logsave -as bitacola.log comanda 2>/dev/null

Salut!
El dia 10/10/2015 13:06, "Narcis Garcia"  va
escriure:

> Hola, fins ara, als meus programets fets en ShellScript, quan volia
> enregistrar per bitàcola la sortida d'una comanda ho feia amb la
> utilitat «tee»:
>
> comanda 2>&1 | tee -a bitacola.log
>
> Ara he trobat l'eina «logsave» que facilita la interacció:
>
> logsave -as bitacola.log comanda
>
> Però resulta que a la bitàcola afegeix unes anotacions que ningú no li
> demana:
>
> Log of comanda
> Sat Oct 10 12:32:29 2015
> (...)
> Sat Oct 10 12:32:35 2015
> 
>
> En comptes d'haver de tractar i escapçar cada vegada la bitàcola,
> voldria saber si algú ha trobat una sintaxi de logsave per evitar això,
> és a dir, que només enregistri allò que dóna la comanda executada.
> O bé si hi ha alguna altra eina millor per GNU.
>
> Gràcies.
>
>


Re: [deb-cat] logsave mes net

2015-10-10 Conversa Narcis Garcia
El comportament és el mateix.

Gràcies.


El 10/10/15 a les 13:19, Roger Sicart ha escrit:
> Bones,
> 
> Jo provaria de redirigir stderr a /dev/null per veure si el comportament
> es el mateix:
> 
> logsave -as bitacola.log comanda 2>/dev/null
> 
> Salut!
> 
> El dia 10/10/2015 13:06, "Narcis Garcia"  > va escriure:
> 
> Hola, fins ara, als meus programets fets en ShellScript, quan volia
> enregistrar per bitàcola la sortida d'una comanda ho feia amb la
> utilitat «tee»:
> 
> comanda 2>&1 | tee -a bitacola.log
> 
> Ara he trobat l'eina «logsave» que facilita la interacció:
> 
> logsave -as bitacola.log comanda
> 
> Però resulta que a la bitàcola afegeix unes anotacions que ningú no li
> demana:
> 
> Log of comanda
> Sat Oct 10 12:32:29 2015
> (...)
> Sat Oct 10 12:32:35 2015
> 
> 
> En comptes d'haver de tractar i escapçar cada vegada la bitàcola,
> voldria saber si algú ha trobat una sintaxi de logsave per evitar això,
> és a dir, que només enregistri allò que dóna la comanda executada.
> O bé si hi ha alguna altra eina millor per GNU.
> 
> Gràcies.
> 



Re: [deb-cat] logsave mes net

2015-10-10 Conversa Ernest Adrogué
2015-10-10, 12:48 (+0200); Narcis Garcia escriu:
> Hola, fins ara, als meus programets fets en ShellScript, quan volia
> enregistrar per bitàcola la sortida d'una comanda ho feia amb la
> utilitat «tee»:
> 
> comanda 2>&1 | tee -a bitacola.log
> 
> Ara he trobat l'eina «logsave» que facilita la interacció:
> 
> logsave -as bitacola.log comanda

Quin avantatge té? Si només és la sintaxi pots definir una funció com ara

log () {
out="$1"
shift
"$@" 2>&1 | tee -a "$out"
}

log  



Re: [deb-cat] logsave mes net

2015-10-10 Conversa Narcis Garcia
No em val la pena recompilar, perquè el programet meu el faig servir en
ordinadors recent instal·lats i utilitzant únicament els executables
dels ordinadors nets (en diferents arquitectures);
www.actiu.net/peinddd

Estic optant per processar la bitàcola «bruta» apart, i annexar-la
després a la bitàcola de destinació.


El 10/10/15 a les 13:59, Roger Sicart ha escrit:
> Bones,
> 
> Al codi font del programa original s'escriu la data a l'inici i al final
> dels logs de la comanda, com tu mostra es al teu email.
> 
> El programa està fet en C i es bastant senzill, podries descarregar-lo,
> esborrar les 4 línies que sobren i recompilarlo, tot i que no se si val
> la pena...
> 
> Apa!
> 
> 
> On Saturday, 10 October 2015, Narcis Garcia  > wrote:
> 
> El comportament és el mateix.
> 
> Gràcies.
> 
> 
> El 10/10/15 a les 13:19, Roger Sicart ha escrit:
> > Bones,
> >
> > Jo provaria de redirigir stderr a /dev/null per veure si el
> comportament
> > es el mateix:
> >
> > logsave -as bitacola.log comanda 2>/dev/null
> >
> > Salut!
> >
> > El dia 10/10/2015 13:06, "Narcis Garcia"  
> > >> va escriure:
> >
> > Hola, fins ara, als meus programets fets en ShellScript, quan
> volia
> > enregistrar per bitàcola la sortida d'una comanda ho feia amb la
> > utilitat «tee»:
> >
> > comanda 2>&1 | tee -a bitacola.log
> >
> > Ara he trobat l'eina «logsave» que facilita la interacció:
> >
> > logsave -as bitacola.log comanda
> >
> > Però resulta que a la bitàcola afegeix unes anotacions que
> ningú no li
> > demana:
> >
> > Log of comanda
> > Sat Oct 10 12:32:29 2015
> > (...)
> > Sat Oct 10 12:32:35 2015
> > 
> >
> > En comptes d'haver de tractar i escapçar cada vegada la bitàcola,
> > voldria saber si algú ha trobat una sintaxi de logsave per
> evitar això,
> > és a dir, que només enregistri allò que dóna la comanda executada.
> > O bé si hi ha alguna altra eina millor per GNU.
> >
> > Gràcies.
> >
> 
> 
> 
> -- 
> --
> 
> R. Sicart
> 



Re: [deb-cat] logsave mes net

2015-10-10 Conversa Roger Sicart
Bones,

Al codi font del programa original s'escriu la data a l'inici i al final
dels logs de la comanda, com tu mostra es al teu email.

El programa està fet en C i es bastant senzill, podries descarregar-lo,
esborrar les 4 línies que sobren i recompilarlo, tot i que no se si val la
pena...

Apa!


On Saturday, 10 October 2015, Narcis Garcia  wrote:

> El comportament és el mateix.
>
> Gràcies.
>
>
> El 10/10/15 a les 13:19, Roger Sicart ha escrit:
> > Bones,
> >
> > Jo provaria de redirigir stderr a /dev/null per veure si el comportament
> > es el mateix:
> >
> > logsave -as bitacola.log comanda 2>/dev/null
> >
> > Salut!
> >
> > El dia 10/10/2015 13:06, "Narcis Garcia"  
> > >> va escriure:
> >
> > Hola, fins ara, als meus programets fets en ShellScript, quan volia
> > enregistrar per bitàcola la sortida d'una comanda ho feia amb la
> > utilitat «tee»:
> >
> > comanda 2>&1 | tee -a bitacola.log
> >
> > Ara he trobat l'eina «logsave» que facilita la interacció:
> >
> > logsave -as bitacola.log comanda
> >
> > Però resulta que a la bitàcola afegeix unes anotacions que ningú no
> li
> > demana:
> >
> > Log of comanda
> > Sat Oct 10 12:32:29 2015
> > (...)
> > Sat Oct 10 12:32:35 2015
> > 
> >
> > En comptes d'haver de tractar i escapçar cada vegada la bitàcola,
> > voldria saber si algú ha trobat una sintaxi de logsave per evitar
> això,
> > és a dir, que només enregistri allò que dóna la comanda executada.
> > O bé si hi ha alguna altra eina millor per GNU.
> >
> > Gràcies.
> >
>
>

-- 
--

R. Sicart


Re: [deb-cat] logsave mes net

2015-10-10 Conversa Narcis Garcia
logsave també permet estalviar alguna anomalia de text amb caràcters
especials, com quan hi ha controls de progrés %.


El 10/10/15 a les 13:19, Ernest Adrogué ha escrit:
> 2015-10-10, 12:48 (+0200); Narcis Garcia escriu:
>> Hola, fins ara, als meus programets fets en ShellScript, quan volia
>> enregistrar per bitàcola la sortida d'una comanda ho feia amb la
>> utilitat «tee»:
>>
>> comanda 2>&1 | tee -a bitacola.log
>>
>> Ara he trobat l'eina «logsave» que facilita la interacció:
>>
>> logsave -as bitacola.log comanda
> 
> Quin avantatge té? Si només és la sintaxi pots definir una funció com ara
> 
> log () {
>   out="$1"
>   shift
>   "$@" 2>&1 | tee -a "$out"
> }
> 
> log  
>