Linux/Unix Shell Scripting - Capturar Error en Shell

 
Vista:

Capturar Error en Shell

Publicado por Sir Mafia (3 intervenciones) el 30/08/2005 23:45:40
Hola, me encuentro haciendo un script en shell que me genere un backup de unos archivos que tengo listados en un archivo de configuración, los copio en una carpeta que voy a comprimir y cifrar para pasar al servidor de backups, pero en el momento en el que se va a copiar el archivo con el comando "cp", si el archivo no existe, genera una salida:

"cp: no se puede efectuar `stat' sobre «/usr/local/sistemas/copia-20050829.bak.gz»: No existe el fichero o el directorio"

La idea es poder capturar este mensaje sin que salga en la consola y así poder hacer algún tipo de notificación del error por mail.

Les agradecería si alguien sabe cómo hacerlo, por que no he podido capturar el mensaje dentro del script sino que se muestra por la consola.

Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Capturar Error en Shell

Publicado por n0str0m0 (180 intervenciones) el 01/09/2005 00:08:06
Se me ocurre lo siguiente:

Redirecciona stderr a un fichero temporal, algo así como:

cp lo_que_sea a_donde_sea 2>err.temp

Luego lees el temp, lo metes en un mail y borras el temp.

Salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Capturar Error en Shell

Publicado por jorge (5 intervenciones) el 03/09/2005 10:10:25
despues del cp XXXX YYYYY me parece que lo conveniente es capturar el error averiguando como termino, de esta manera:
cp origen destino
if [ $? -ne 0 ]; then
echo "hubo error"
fi
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Capturar Error en Shell

Publicado por n0str0m0 (180 intervenciones) el 03/09/2005 12:03:27
Esa fue mi primera impresión, pero como Sir Mafia decía que además quería redireccionar el error y quedarse con el mensaje, pues no se me ocurría otra cosa.
De cualquier modo, lo que tú propones es la forma más estándar de tratar los errores en los shellscripts y en principio es como deberían ser tratados.

Salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Capturar Error en Shell

Publicado por Sir Mafia (3 intervenciones) el 03/09/2005 19:49:13
Muchas gracias por esta información, lo que hice fué utilizar la opción que me indicó n0str0m0, pero me dió algunos problemas la redirección al log.

log es la variable en la que almaceno todo lo que deseo escribir en el mensaje de errores que voy a enviar por mail. Para agregar la salida a este log utilicé los siguientes pasos:

cp lo_que_sea a_donde_sea 2&>errLog
cat errLog >> $log
rm errLog # esto lo hago para no quedarme con ese archivo...

Lo hago de esta forma, por que lo que busco es evitar que se muestre en la terminal el mensaje de error durante la ejecución, sin embargo me sirvió también el mensaje de jorge ya que voy a utilizar esa idea en un nuevo script que estoy escribiendo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Capturar Error en Shell

Publicado por fernando  (1 intervención) el 18/03/2009 21:58:19
he leido todo esto...y es lo mismo que yo hago....pero voy a aprovechar esta oportunidad para ver si alguien me puede ayudar.
Yo en la shell capturo el error es 0 o 1 0 es correcto y 1 es error, lo que quiero
saber es de que forma puedo capturar el CODIGO REAL NUMERICO que
corresponda a tal o cual error. Ej cp origen destino, si me da un error debo
saber si el archivo origen no existe o si el directorio de destino no existe, o si
el file system esta lleno (por decir algo, pero eso es facil)
Si alguien me puede decir donde existe una tabla de parametros de errores para
la ejecucion de instrucciones unix, se lo agradeceria.

fernando
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar