Você está literalmente "finalizando um arquivo" inserindo esta sequência de escape, ou seja, a sessão interativa do shell é vista como um fluxo de arquivos real pelo shell, como qualquer outro fluxo de arquivos? Se sim, qual arquivo?
Ou, o sinal Ctrl+ é Dapenas um espaço reservado que significa "o usuário terminou de fornecer entrada e você pode encerrar"?
shell
escape-characters
Geeb
fonte
fonte
set -o ignoreeof
para mudar esse comportamento.Respostas:
O
^D
caractere (também conhecido como\04
ou 0x4, END OF TRANSMISSION em Unicode) é o valor padrão para oeof
parâmetro de caractere de controle especial do terminal ou driver do pseudo-terminal no kernel (mais precisamente datty
disciplina de linha anexada ao serial ou pseudo- dispositivo tty ). Essa é ac_cc[VEOF]
datermios
estrutura passado para os TCSETS / TCGETSioctl
um problemas para o dispositivo terminal de afetar o comportamento do condutor.O comando típico que envia esses
ioctls
é ostty
comando.Para recuperar todos os parâmetros:
Esse
eof
parâmetro é relevante apenas quando o dispositivo terminal está noicanon
modo.Nesse modo, o driver do terminal (não o emulador de terminal) implementa um editor de linhas muito simples , onde você pode digitar Backspacepara apagar um caractere, Ctrl-Uapagar toda a linha ... Quando um aplicativo lê no dispositivo do terminal, ele não vê nada até você pressiona o Returnponto em que
read()
retorna a linha completa, incluindo o últimoLF
caractere (por padrão, o driver do terminal também traduz oCR
enviado pelo seu terminal ReturnparaLF
).Agora, se você deseja enviar o que você digitou até agora sem pressionar Enter, é aí que você pode inserir o
eof
caractere. Ao receber esse caractere do emulador de terminal, o driver do terminal envia o conteúdo atual da linha, para que o aplicativo queread
estiver fazendo o recebimento o receba como está (e não inclua umLF
caractere à direita ).Agora, se a linha atual estava vazia e desde que o aplicativo tenha lido completamente as linhas inseridas anteriormente, o
read
caractere retornará 0.Isso significa o fim do arquivo para o aplicativo (quando você lê um arquivo, você lê até que não haja mais nada a ser lido). É por isso que é chamado de
eof
personagem, porque enviá-lo faz com que o aplicativo veja que não há mais entrada disponível.Agora, os shells modernos, quando solicitados, não configuram o terminal no
icanon
modo porque implementam seu próprio editor de linha, que é muito mais avançado do que o driver de terminal incorporado. No entanto, em seu próprio editor de linha , para evitar confundir os usuários, eles dão ao^D
personagem (ou qualquer que seja aeof
configuração do terminal com alguns) o mesmo significado (para significareof
).fonte
CTRL_D é apenas um sinal dizendo que este é o fim de um fluxo de texto. Você não finaliza um arquivo com ele, finaliza seu fluxo de entrada digitando-o. CTRL_D também não representa nenhum caractere ou byte, como você pode descobrir com a ferramenta hexdump:
fonte