it-swarm-eu.dev

Jak signalizovat konec vstupu stdin

  1. V Bash, jsem se dozvěděl, že koncový signál může být změněn zde dokument. Jak ale ve výchozím nastavení mohu signalizovat konec vstupu stdin?
  2. Náhodou jsem zjistil, že s kočkou a chardetem mohou být jejich stdinové vstupy signalizovány jako dokončené pomocí Ctrl + d. Zdá se však, že si pamatuji, že Ctrl + d a Ctrl + c jsou podobné ukončení provádění spuštěného příkazu. Tak se mýlím?
84
Tim

Ctrl+D, když je zadáno na začátku řádku na terminálu, označuje konec vstupu. Nejedná se o signál v unixovém smyslu: když aplikace čte z terminálu a uživatel stiskne Ctrl+D, aplikace je upozorněna, že bylo dosaženo konce souboru (jako kdyby to bylo čtení ze souboru a prošlo posledním bajtem).

Ctrl+C pošle signál, SIGINT . Ve výchozím stavu SIGINT (signál přerušení) zabíjí aplikaci v popředí, ale aplikace může zachytit signál a reagovat jiným způsobem (například Shell samotný zachytí signál a zruší řádek, který jste začali psát, ale to ' t skončí, zobrazí se nová výzva a čeká na nový příkazový řádek).

Znaky spojené s koncem souboru a SIGINT můžete změnit příkazem stty , např. stty eof a by udělal a znak konce souboru a stty intr ^- zakáže znak SIGINT. To je zřídka užitečné.

Váš druhý bod spojuje dvě zcela odlišné věci dohromady.

  • Ctrl + C vyšle signál zabíjení do běžícího procesu.
  • Ctrl + D odešle znak konec přenos .

Hledáte to druhé.

23
Caleb