No tutorial do bash que estou lendo, ele diz que se você abrir um descritor de arquivo para leitura, ou seja,
exec 3< echolist
Então você deve fechá-lo assim,
exec 3<&-
No entanto, se você abrir um descritor de arquivo para gravação, ele deverá ser fechado assim:
exec 3>&-
No entanto, quando olho para a Internet, vejo pessoas abrindo arquivos e depois os fechando com isso:
exec 3>&-
NOTA: quando, de acordo com o tutorial, eles devem estar usando exec 3<&1
.
Portanto, minha pergunta é: todos os descritores de arquivo podem ser fechados via exec n>&-
onde n é o número do descritor de arquivo? Independentemente de ter sido aberto para leitura, escrita ou ambos?
bash
shell
io-redirection
Jason
fonte
fonte
>&-
e<&-
é o padrão fd quando não especificado (>&-
é1>&-
enquanto<&-
está0<&-
). O mesmo para ox>&y
qual é o mesmo quex<&y
exceto quandox
não é fornecido.Respostas:
Você pode fechar o descritor de arquivo usando os dois
<&-
e>&-
,bash
analisará duas sintaxe da mesma forma.Do arquivo y.tab.c no
bash
código fonte:fonte
<>
descritores de arquivo.3>&-
ou3<&-
parece fechar o descritor.<>
pode ser feito da mesma maneira.Tanto quanto eu posso ver,
exec 3>&-
eexec 3<&-
são as mesmas e podem ser usados em qualquer descritor de arquivo, independentemente de como ele foi aberto. De acordo com as seções 2.7.6 e 2.7.5 da definição POSIX da linguagem de comando do shell :Observe que nenhum deles especifica nada sobre como o descritor de arquivo n foi aberto originalmente. Isso está de acordo com o fato de que o close (2) não se importa com a maneira como você abriu o arquivo.
Uma rápida descrição do seguinte:
contra isso:
mostra que nos dois casos, o Bash faz exatamente a mesma coisa.
Dois fatos levemente interessantes
[n]>&-
fecha os descritores de arquivo.No código Bash para lidar com redirecionamentos (redir.c), você pode encontrar o seguinte:
fonte
[N]>&WORD
: git .savannah.gnu.org / cgit / bash.git / tree / doc /…Um exemplo para o entendimento do cuonglm de fechar um '<>' FD.
Isso é citado no Advanced Bash-Scripting Guide em http://tldp.org/LDP/abs/html/io-redirection.html
fonte