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

 

 

Un comentario en «Redirigir la salida y el mensaje de error de un comando a /dev/null»

Deja una respuesta

Tu dirección de correo electrónico no será publicada.