По умолчанию OS X (ранее Mac OS X) Терминалы признают EOF
когда Ctrl - D нажимаются в начале строки.
В деталях, фактическая операция заключается в том, когда Ctrl - D нажата, все байты в входном буфере терминала передаются в запущенном процессе с помощью терминала. В начале строки в буфере нет байтов, поэтому говорят, что имеется нулевой байт, и это действует как индикатор EOF
.
Эта процедура служит также способ доставки вклад в этот процесс до конца строки: Пользователь может ввести несколько символов и нажмите Ctrl - D, и символы будут посланы к процессу немедленно, без обычного ожидания ввода/возврата. После того, как операция «отправить все буферизованные байты немедленно» выполняется, в буфере не осталось байтов. Итак, когда Ctrl - D нажимается второй раз, это то же самое, что и начало строки (никакие байты не отправляются, а процессу даются нулевые байты), и он действует как EOF
.
Вы можете узнать больше о поведении терминала, используя команду «man 4 tty» в терминале. Стандартная линейная дисциплина - это termios. Вы можете узнать больше о линейной дисциплине termios, используя команду man termios
.
https://discussions.apple.com/message/11198745#11198745 – Dave