Como podemos desconectar um descritor de arquivo de qualquer arquivo?

Como podemos desconectar um descritor de arquivo de qualquer arquivo?

No bash podemos criar uma conexão entre um descritor de arquivo e um arquivo, por exemplo, por

exec > /path/to/myfile

que conecta fd 1 ao arquivo.

Eu queria saber como podemos desconectar um fd de qualquer arquivo conectado a ele, para que o fd não esteja conectado a nenhum arquivo? Observe que /dev/nulle /dev/ttysão arquivos.

Obrigado.

Meu propósito é descobrirUm shell conecta automaticamente os descritores de arquivo 0, 1 e 2 ao seu terminal de controle?, desconectando fd 0, 1 e 2 no bash, antes de executar bashno mesmo shell bash.

Responder1

O que você deseja é fechar o descritor de arquivo que no shell do tipo Bourne é feito com o operador >&-(o padrão é fd 1) ou <&-(o padrão é fd 0):

exec >&-
exec 1>&-
exec 1<&-

são todos equivalentes e resultam na close(1)realização de uma chamada de sistema.

Observe que geralmente é uma má ideia fechar os descritores de arquivo 0, 1 e 2, pois a maioria dos comandos espera que eles estejam abertos (são seus stdin, stdout e stderr), e a abertura de um arquivo pode fazer com que esse arquivo se torne inadvertidamente seu stdin/ stdout/stderr e o que eles imprimem em stdout ou stderr podem acabar sendo gravados nesses arquivos.

informação relacionada