Если tclsh запущен скрипт, он не прекращает работы при обнаружении EOF на стандартном вводе; это чисто особенность встроенного REPL. Вы можете сами обнаружить такое условие, используя eof stdin
, после чего вы можете решить, что с этим делать.
Если Вы желаете сделать Ctrl +D не будет EOF, то ваш самый простой способ поставить терминал в нестандартном режиме, как это:
set sttySettings [exec stty -g <@stdin]
exec stty -echo raw <@stdin
Когда вы сделано, переключитесь назад следующим образом:
exec stty $sttySettings <@stdin
Убедитесь, что вы переключаетесь обратно до выхода программы!
Другое дело, что если вы работаете с сырым входом, вам придется обрабатывать все редактирование строк самостоятельно. Удобный способ сделать это - использовать чистую систему Tcl, подобную readline-such as this example from the Tcler's Wiki. Возможно, вам придется немного приспособить его, чтобы сделать Ctrl + D делать то, что вы хотите.
Альтернатива, чтобы сделать это, которая оставляет вещи в приготовленном режиме и только делает Ctrl + D неспециальными (проверено на OSX):
exec stty eof "" <@stdin
Опять же, вам необходимо установить вещи обратно при выходе, и тот факт, что он не является особенным вообще, может вызвать проблемы в другом месте; после этого трюка выше, это просто нормальный характер.
Вы хотите сказать ignore^D в интерактивной сессии tclsh? –
На самом деле я хочу, чтобы tclsh не выходил, когда я звоню tclsh something.tcl. Игнорирование^D в интерактивном сеансе даст решение для этого – Vahagn
Ознакомьтесь с последним комментарием Брайана Окли на .tclsh - это похоже на то, что вы хотите. –