lunes, 25 de febrero de 2019

Redirección de salida estándar y de error

En el terminal de Linux, las aplicaciones disponen de dos salidas por defecto por las que sacar texto: la salida estándar (stdout) y la salida estándar de error (stderr).
Por defecto, ambas salidas son redireccionadas al terminal, por lo que si escribimos el siguiente comando:
$ ls + a.sh
ls: cannot access '+': No such file or directory
a.sh
Por un lado obtendremos la primera línea, que salió por stderr, y por otro la segunda línea que salió por stdout al no tratarse de ningún error.
Si la salida del comando ls la derivamos a un fichero:
$ ls + a.sh > salida
ls: cannot access '+': No such file or directory
Veremos que sigue saliendo por el terminal el mensaje de error, pues solamente derivamos la salida estándar, stdout. Es decir, el comando ejecutado es equivalente al siguiente:
$ ls + a.sh 1> salida
ls: cannot access '+': No such file or directory
Pues la salida stdout está asociada con el descriptor de ficheros “1”.
Si queremos que toda salida vaya derivada al fichero salida, tendremos que tratar también el caso de stderr, asociado al descriptor de ficheros "2":
$ ls + a.sh >salida 2>salida
A modo de abreviatura, y dado que estas redirecciones son bastante comunes, se puede escribir lo siguiente:
$ ls + a.sh >salida 2>&1
$ ls + a.sh &>salida
Ambas son equivalentes. En la primera, se indica que la salida estándar de error se redirigirá a la salida estándar, stdout. Al estar esta segunda redireccionada a un fichero, se tendrá que ambas salidas irán a parar al mismo fichero y por consola no aparecerá nada.
La segunda forma indica que ambas salidas se redirigirán al fichero indicado.

No hay comentarios:

Publicar un comentario