it-swarm-ru.tech

Как сигнализировать об окончании ввода стандартного ввода

  1. В Bash я узнал, что сигнал окончания можно изменить с помощью вот документа. Но по умолчанию, как я могу сигнализировать конец ввода стандартного ввода?
  2. Я обнаружил, что с помощью cat и chardet их входные данные stdin могут сигнализироваться как завершенные с помощью Ctrl + d. Но, похоже, я помню, что Ctrl + d и Ctrl + c похожи на завершение выполнения запущенной команды. Так я не прав?
84
Tim

Ctrl+Dпри вводе в начале строки на терминале означает конец ввода. Это не сигнал в смысле Unix: когда приложение читает с терминала, а пользователь нажимает Ctrl+Dприложение уведомляется о том, что достигнут конец файла (как если бы он читал из файла и передал последний байт).

Ctrl+C отправляет сигнал, SIGINT . По умолчанию SIGINT (сигнал прерывания) убивает приложение переднего плана, но приложение может перехватить сигнал и реагировать по-другому (например, сама оболочка ловит сигнал и прерывает линию, которую вы начали печатать, но это не так). t выход, он показывает новую подсказку и ждет новой командной строки).

Вы можете изменить символы, связанные с концом файла и SIGINT, с помощью команды stty , например, stty eof a сделает a символом конца файла, а stty intr ^- отключит символ SIGINT. Это редко полезно.

119

Ваше второе замечание смешивает две совершенно разные вещи.

  • Ctrl + C отправляет сигнал уничтожения запущенному процессу.
  • Ctrl + D отправляет символ Конец передачи .

Вы ищете последнее.

23
Caleb