Como sinalizar o final da entrada de stdin

71
  1. No Bash, aprendi que o final sinal pode ser alterado por aqui documento. Mas, por padrão, como posso sinalizar o fim da entrada de stdin?
  2. aconteceu de eu achar isso com gato e chardet, suas entradas de stdin podem ser sinalizado como terminado por Ctrl + d. Mas Eu me lembro que Ctrl + d e Ctrl + c são semelhantes ao final execução de um comando em execução. assim estou errado?
por Tim 09.07.2011 / 17:54

2 respostas

101

Ctrl + D , quando digitado no início de uma linha em um terminal, significa o final da entrada. Este não é um sinal no sentido unix: quando um aplicativo está lendo do terminal e o usuário pressiona Ctrl + D , o aplicativo é notificado de que o final do arquivo foi atingido (como se estivesse lendo um arquivo e tivesse passado o último byte).

Ctrl + C envia um sinal, SIGINT . Por padrão, o SIGINT (o sinal de interrupção) mata o aplicativo em primeiro plano, mas o aplicativo pode capturar o sinal e reagir de alguma maneira diferente (por exemplo, o próprio shell captura o sinal e aborta a linha que você começou a digitar, mas não t sair, mostra um novo prompt e aguarda por uma nova linha de comando).

Você pode alterar os caracteres associados ao fim do arquivo e ao SIGINT com as stty comando, por exemplo stty eof a tornaria a o caractere de fim de arquivo e stty intr ^- desabilitaria o caractere SIGINT. Isso raramente é útil.

    
por 09.07.2011 / 18:27
20

Seu segundo ponto inclui duas coisas completamente diferentes.

  • Ctrl + C envia um sinal de eliminação para o processo em execução.
  • Ctrl + D envia um caracter Fim da transmissão .

Você está procurando pelo último.

    
por 09.07.2011 / 18:26