gpt4 book ai didi

linux - rlwrap 在后台运行时挂起作业

转载 作者:太空狗 更新时间:2023-10-29 12:21:47 26 4
gpt4 key购买 nike

我对 rlwrap 有疑问(请参阅手册页 here)。考虑这种情况:empty.tcl 是一个空文件。在 bash 这一行

tclsh empty.tcl &

在后台运行作业并退出,所以我得到这个提示

[1]+ 完成 tclsh empty.tcl

虽然这条线

rlwrap tclsh empty.tcl &

在后台运行作业并且不退出,所以我得到这个提示

[1]+ 已停止 rlwrap tclsh empty.tcl

相应的作业在后台挂起。我的问题是如何让它退出工作而不是挂起?

rlwrap 是一个 Linux 实用命令,它运行指定的命令,拦截用户输入以提供 readline 的行编辑、持久历史记录和完成。正如那里提到的,rlwrap 的主要属性是您不应该注意到命令和 rlwrap 命令之间的任何区别,但是,如上所述,此属性不成立。

也许有人可以建议 rlwrap 的替代方案,其功能如预期?

最佳答案

基本上,您无法做到这一点并让它发挥作用。问题(从您的角度来看)是如果您将脚本文件参数传递给 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com