Если tclsh запускает скрипт, он не завершается при обнаружении EOF на stdin;это чисто особенность встроенного REPL.Вы можете обнаружить такое состояние самостоятельно, используя eof stdin
, после чего вы можете решить, что с ним делать.
Если вы хотите сделать Ctrl + D не будьте EOF, тогда ваш самый простой способ - перевести терминал в режим raw, например:
set sttySettings [exec stty -g <@stdin]
exec stty -echo raw <@stdin
Когда вы закончите, переключитесь обратно так:
exec stty $sttySettings <@stdin
Убедитесь, что вы переключаетесь обратно до выхода из программы!
Другое дело, что если вы работаете с необработанным вводом, вам придется самостоятельно обрабатывать все строки.Удобный способ сделать это - использовать чистую Tcl-подобную систему Tcl , такую как этот пример из вики Tcler .Возможно, вам придется немного его изменить, чтобы Ctrl + D делал то, что вы хотите.
Альтернативой является то, что оставляет все в готовом режиме и просто Ctrl + D не является специальным (проверено на OSX):
exec stty eof "" <@stdin
Опять же, вам нужно вернуть все обратно при выходе и тот факт, что этоне особенное вообще может вызвать проблемы в другом месте;после вышеописанного трюка это обычный персонаж.