Como podemos desconectar um descritor de arquivo de qualquer arquivo?

2

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

exec > /path/to/myfile

que conecta o 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 objetivo é descobrir um shell conecta automaticamente os descritores de arquivo 0, 1 e 2 ao seu terminal de controle? , desconecte fd 0, 1 e 2 no bash, antes de executar bash no mesmo shell bash.

    
por Tim 29.05.2018 / 04:41

1 resposta

4

O que você quer é fechar o descritor de arquivo que no shell 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 em uma chamada de sistema close(1) sendo feita.

Observe que geralmente é uma má idéia fechar os descritores de arquivo 0, 1 e 2, já que a maioria dos comandos espera que eles sejam abertos (é stdin, stdout e stderr), e eles abrindo um arquivo podem fazer com que esse arquivo se torne inadvertidamente seus stdin / stdout / stderr e o que eles imprimem em stdout ou stderr podem acabar sendo escritos nesses arquivos.

    
por 29.05.2018 / 04:49