Redirigir la salida y el mensaje de error de un comando a /dev/null
En ocasiones debemos comprobar si un comando se ejecuta correctamente pero no queremos realizar ninguna modificación ni mostrar nada por pantalla. Para esto, podemos usar la redirección tanto de la salida estándar como del mensaje de error al dispositivo nulo con 2>&1 /dev/null
Aunque no muestre nada por pantalla, internamente se almacena el valor devuelto en $?
. Si el valor devuelto es 0, es que el comando se ha ejecutado correctamente. Si el valor de $? es distinto a 0, es que no se ha ejecutado correctamente, por lo que podemos hacer comprobaciones sobre el resultado devuelto por un comando.
Veamos algunos ejemplos.
Saber si un fichero es una imagen
Con identify podemos mostrar información de una imagen.
#!/bin/bash filename="imagen.png" identify $filename 2>&1 > /dev/null if [ $? -eq 0 ] then echo "$filename es una imagen." fi
Saber si un comando está instalado en el sistema
Podemos saber la ruta de un fichero ejecutable con which. Si al comprobar con which la ruta del comando devuelve algo distinto a 0, es que ese comando no se encuentra instalado.
#!/bin/bash com="ls" which $com 2>&1 > /dev/null if [ $? -eq 0 ] then echo "El comando $com se encuentra instalado en $(which $com)." else echo "El comando $com no se encuentra instalado." fi
Saber la duración de un vídeo
Otra forma de usar 2>&1
es redirigiendo la salida a un filtro, por ejemplo, a grep.
ffmpeg -i video.mp4 2>&1 | grep "Duration"
Esto es sólo un ejemplo de cómo redirigir la salida a una tubería para filtrar con grep, para ser más correctos, si queremos saber la duración de un vídeo con ffmpeg, deberíamos filtrar más con cut:
ffmpeg -i video.mp4 2>&1 | grep "Duration" | cut -d " " -f 4 | cut -d "," -f 1
Pingback: Saber la duración de un vídeo con ffmpeg – Linux en Español