
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/null
e /dev/tty
sã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 bash
no 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.