it-swarm.it

Come segnalare la fine dell'ingresso stdin

  1. In Bash, ho imparato che il segnale finale può essere modificato da questo documento. Ma per impostazione predefinita come posso segnalare la fine dell'input stdin?
  2. Mi è capitato di scoprire che con cat e chardet, i loro input stdin possono essere segnalati come finiti da Ctrl + d. Ma mi sembra di ricordare che Ctrl + d e Ctrl + c sono simili alla conclusione dell'esecuzione di un comando in esecuzione. Quindi sbaglio?
84
Tim

Ctrl+D, quando digitato all'inizio di una riga su un terminale, indica la fine dell'input. Questo non è un segnale nel senso unix: quando un'applicazione legge dal terminale e l'utente preme Ctrl+D, l'applicazione viene informata che è stata raggiunta la fine del file (proprio come se stesse leggendo da un file e avesse superato l'ultimo byte).

Ctrl+C invia un segnale, SIGINT . Per impostazione predefinita, SIGINT (il segnale di interruzione) uccide l'applicazione in primo piano, ma l'applicazione può catturare il segnale e reagire in un modo diverso (ad esempio, la Shell stessa cattura il segnale e interrompe la linea che hai iniziato a digitare, ma non t esci, mostra un nuovo prompt e attende una nuova riga di comando).

Puoi modificare i caratteri associati a end-of-file e SIGINT con il comando stty , ad es. stty eof a renderebbe a il carattere di fine file e stty intr ^- disabiliterebbe il carattere SIGINT. Questo è raramente utile.

Il tuo secondo punto mette insieme due cose completamente diverse.

  • Ctrl + C invia un segnale di interruzione al processo in esecuzione.
  • Ctrl + D invia un carattere Fine della trasmissione .

Stai cercando quest'ultimo.

23
Caleb