我对rlwrap有问题(请参见手册页here)。考虑这种情况:empty.tcl
是一个空文件。在bash这行tclsh empty.tcl &
在后台运行作业并退出它,所以我得到了这个提示[1]+ Done tclsh empty.tcl
。
虽然这条线rlwrap tclsh empty.tcl &
在后台运行作业,并且不退出它,所以我得到了这个提示[1]+ Stopped rlwrap tclsh empty.tcl
。
相应的作业卡在后台。我的问题是如何使其退出工作而不是挂起?
rlwrap是Linux实用程序命令,它运行指定的命令,拦截用户输入,以便提供readline的行编辑,持久性历史记录和完成。如此处所述,rlwrap的主要属性是您应该注意命令与rlwrap命令之间没有任何区别,但是,如上所述,该属性不成立。
也许有人可以建议rlwrap的替代品,其功能是否如预期的那样?
最佳答案
基本上,您不能执行此操作并使其起作用。问题(从您的 Angular 来看)是,如果将脚本文件参数传递给tclsh
,它将执行该参数然后退出。请使用不带其他参数的rlwrap tclsh
(这样它就可以在交互模式下工作),或者使用模仿Tcl的交互式REPL的脚本。编写起来并不难:
fconfigure stdout -buffering none
set command ""
puts -nonewline "% "
while {[gets stdin line] >= 0} {
append command $line "\n"
if {[info complete $command]} {
# Got a complete command; evaluate and catch result
if {[catch $command msg]} {
puts "error: $msg"
} elseif {$msg ne ""} {
puts $msg
}
set command ""
puts -nonewline "% "
}
}
好的,您可以对其进行一些调整,但是它显示了如何执行此操作。将其粘贴在实际脚本的末尾,
rlwrap
应该可以很好地处理结果。关于linux - rlwrap在后台运行时挂起作业,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3810321/