
En bash podemos crear una conexión entre un descriptor de archivo y un archivo, por ejemplo, mediante
exec > /path/to/myfile
que conecta fd 1 al archivo.
Me preguntaba cómo podemos desconectar un fd de cualquier archivo conectado a él, de modo que el fd no esté conectado a ningún archivo. Tenga en cuenta que /dev/null
y /dev/tty
son archivos.
Gracias.
Mi propósito es descubrir¿Un shell conecta automáticamente los descriptores de archivos 0, 1 y 2 a su terminal de control?, desconectando fd 0, 1 y 2 en bash, antes de ejecutar bash
en el mismo shell de bash.
Respuesta1
Lo que desea es cerrar el descriptor de archivo que en el shell tipo Bourne se realiza con el operador >&-
(por defecto fd 1) o <&-
(por defecto fd 0):
exec >&-
exec 1>&-
exec 1<&-
son todos equivalentes y dan como resultado que close(1)
se realice una llamada al sistema.
Tenga en cuenta que generalmente es una mala idea cerrar los descriptores de archivos 0, 1 y 2, ya que la mayoría de los comandos esperan que estén abiertos (son sus stdin, stdout y stderr), y abrir un archivo podría hacer que ese archivo se convierta inadvertidamente en su stdin/ stdout/stderr y lo que imprimen en stdout o stderr podría terminar escrito en esos archivos.