¿Qué es /dev/null y cómo puede ayudarte?

Si ya poseemos algunas nociones del árbol de directorios de GNU/Linux, debe sonarnos al menos la referencia /dev/, que es, efectivamente donde se encuentran todos los archivos relacionados con dispositivos de hardware.

Si miramos en el directorio /dev/ veremos un “archivo” llamado null, pero si queremos abrirlo para ver su contenido, el sistema nos dirá que no es posible ya que no es de contenido ordinario. He entrecomillado la palabra archivo porque, como todos sabéis  para Linux todo (hardware y software) se representa como un archivo.

¿A qué dispositivo se corresponde /dev/null?

A efectos prácticos imagínate un cubo de basura, un pozo sin fondo o el espacio sideral al que lanzar cualquier cosa sin posibilidad de recuperarla (por mucho que se empeñen los tipos de la Nasa).

Pero si ya tengo comandos como rm, ¿para qué quiero otra cosa nueva que borre?

Porque la forma de trabajar de ambos “agujeros negros” es completamente diferente: ¿cómo harías para anular en tiempo de ejecución la salida estándar de un error en un comando dentro de un script para la shell? Aquí es donde entra /dev/null.

Vamos a verlo con un ejemplo.

Hemos creado un fichero llamado pruebas conteniendo la cadena “Hola Mundo”. Si queremos representar el contenido de ese fichero en la linea de comandos, podríamos hacerlo de la siguiente forma:

usuario@laptop:~$ cat prueba
Hola Mundo

Si el fichero no existiese o estuviera nombrado como pruebas (con una 's' al final), obtendríamos el siguiente error en la consola:

usuario@laptop:~$ cat pruebas
cat: pruebas: No existe el fichero o el directorio

¿Que podríamos hacer para evitar el mensaje de error? Pues sencillamente redirigir la salida del comando, en caso de error, a un “cubo de basura”, es decir a /dev/null

 

¿Cómo especificamos que sea en caso de error?  Aquí entran los valores estándar de entrada, salida y error para un programa: STDIN, STDOUT y STDERR (que pueden ser sustituidos por 0, 1 y 2 respectivamente). De esta forma, si ponemos...

 

usuario@laptop:~$ cat pruebas 2>/dev/null
usuario@laptop:~$

...veremos que no se producirá en la consola el mensaje de error.

Hay que tener cuidado porque la sintaxis es fundamental: entre los caracteres 2 y > no debe existir espacio. Sino, daría lo siguiente:

usuario@laptop:~$ cat pruebas 2 >/dev/null
cat: pruebas: No existe el fichero o el directorio
cat: 2: No existe el fichero o el directorio

En cambio, un espacio entre > y /dev/null no afectará negativamente el resultado.

También podríamos usar la redirección de errores, por ejemplo, para la captura de errores en un archivo de log de la siguiente forma:

usuario@laptop:~$ cat pruebas 2 >err.log

Otro caso interesante sería la recogida de resultados en otro fichero siempre y cuando no se produjese un error, para lo cual pondríamos:

usuario@laptop:~$ cat prueba 1>resultado_de_salida  2>err.log

Por último cabe poner la expresión "> /dev/null 2>&1" en la que se aúnan la salida estándar y la salida de error redireccionándolas para que en ningún caso se obtenga información de salida.

 

Fuente: usemoslinux

¿Quién está en línea?

Hay 20331 invitados y ningún miembro en línea