Descriptores de archivo

5/8/20244 min read

$ exec 3<> file - En este caso vamos a hablar de descriptores. ¿A qué me refiero con esto? Como vemos en el primer comando, ejecutamos exec 3<> file, donde 3<> es el descriptor que usamos para poder leer y escribir información en un archivo. Indicamos 3<> donde < sirve para poder leer y > para poder escribir. Todo dentro del archivo file como marca en el comando.

Seguidamente vemos como emplearlo. $ whoami >&3 donde al realizar >&3 llamamos al descriptor para que escriba el output de whoami dentro del archivo file. Como podemos comprobar en la imagen.

IMPORTANTE: El descriptor 1 y 2 se van para STDOUT y STDERR.

$pwd >&3 - Como observamos volvemos a decirle al descriptor que agregue a file el output de pwd

$ exec 3<&- De esta manera cerramos el descriptor, es decir lo eliminamos. Como podemos comprobar ya no podemos ejecutar >&3

$ exec 5<> data - Nuevamente creamos un descriptor que enfoque al archivo data con poderes de lectura y escritura.

$exec 6>&5 - Con este comando lo que hacemos es copiar el descriptor 5 al descriptor 6 para que podamos tener los mismos poderes de lectura y escritura en el archivo data en el 6 que en el 5, como podemos comprobar en la imagen al ejecutar $ cat /etc/hosts >&6

Como podeis comprobar como terminal estaba empleando una zsh. En este caso he cambiado de terminal para poderos enseñar con bash como funciona el crear un descriptor, realizar una copia y eliminar el primero para quedarnos con la copia.

$exec 6>&5- Donde 6 será nuestro nuevo descriptor y donde 5 será el descriptor que copiemos y eliminemos. Con la terminación - lo eliminamos. Como podemos comprobar en la imagen.

$exec 5>&- Como podemos comprobar si eliminamos el descriptor 5 con este comando. Todavía tenemos disponible la copia de dicho descriptor. Por ende si utilizamos el descriptor 6 con $ whoami >&6 sigue funcionando sobre el archivo data.