在csh你可以做到
set ignoreeof
或者在bash tou可以做到
export ignoreeof=1
这将使csh / bash忽略EOF,即它不会在Ctrl + D上退出,或者当它到达结尾或文件时。
有没有办法用tclsh做同样的事?
有没有办法让tclsh在到达文件末尾时不退出?
答案 0 :(得分:1)
您可能需要Expect:将其另存为tclsh.exp
#! /usr/bin/env expect
log_user 0
spawn tclsh
if {[llength $argv] > 0} {
send -- "set argv [list [lrange $argv 1 end]]; source [lindex $argv 0]\r"
}
interact
然后运行tclsh.exp somefile.tcl arg arg ...
答案 1 :(得分:1)
如果tclsh正在运行脚本,则在检测到stdin上的EOF时它不会退出;这纯粹是内置REPL的一个特性。您可以使用eof stdin
自行检测此类情况,此时您可以决定如何处理此问题。
如果您想要 Ctrl + D 不是EOF,那么最简单的方法是将终端设置为原始模式,如下所示:
set sttySettings [exec stty -g <@stdin]
exec stty -echo raw <@stdin
完成后,切换回来:
exec stty $sttySettings <@stdin
确保在程序退出前切换回来!
另一件事是,如果你正在使用原始输入,你必须自己处理所有行编辑。一种方便的方法是使用纯Tcl readline-like系统such as this example from the Tcler's Wiki。您可能需要稍微调整一下,使 Ctrl + D 做你想做的事。
另一种方法是执行此操作,使事物处于熟化模式,只需使 Ctrl + D 非特殊(在OSX上测试):
exec stty eof "" <@stdin
同样,你需要在退出时重新设置,而且它根本不是特殊的事实可能会在其他地方引起问题;在上面的那个技巧之后,它只是一个普通的角色。
答案 2 :(得分:0)
您可以使用TclX中的trap
命令。
答案 3 :(得分:0)
tclsh中没有这样的内置功能。</ p>