Supondo que o modo tty "cozido", ctrl - D funciona encerrando o processamento de entrada de linha e enviando os dados já inseridos para o aplicativo. Então, se você digitar "abc" seguido por ctrl - D , esses três bytes serão enviados para o aplicativo.
Agora, como um aplicativo geralmente determina o fim do arquivo? EOF é assumido quando uma leitura retorna 0 bytes. Então você precisa fazer com que uma leitura retorne 0 bytes. Se você apertar primeiro enter e depois ctrl - D , a primeira coisa que você digitou é enviada para o aplicativo junto com o caractere de nova linha. Então o ctrl - D faz com que qualquer dado digitado (isto é, nada!) Seja enviado para o aplicativo, que lê 0 bytes, e assume EOF.
Se você digitar qualquer coisa após o entrar antes de pressionar ctrl - D , o aplicativo obterá essas teclas e aguardará por mais. Então, para gerar EOF sem primeiro pressionar enter , pressione ctrl - D duas vezes seguidas.
Então, para responder à sua pergunta: você primeiro digitou qualquer caractere (além da nova linha) antes de pressionar ctrl - D ? Se sim, tente duas vezes sucessivamente.
Isso pode ser testado com, por exemplo:
$ wc -l
test123 0 1 7
(pressione ctrl - D duas vezes depois do test123
.)
O utilitário wc
mostra o número de linhas, palavras e caracteres lidos. As linhas são 0 porque você não inseriu uma nova linha e test123
é uma palavra e sete caracteres.