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

标签 linux bash background tcl rlwrap

我对 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/

相关文章:

c++ - 文件格式无法识别;视为链接描述文件。文本文件错误?

bash - 带 $@ 参数的大括号扩展

c++ - SDL,如何渲染背景图片?

php - 使用 mysql 从源代码安装 PHP 时出现问题

java - 获取 Java 进程的 CPU 使用率

json - 如何在 bash 脚本中的 curl 中将多行 json 字符串作为正文发布

iphone - 从其他应用返回到应用后会触发哪些功能?

css - 在不透明的背景图像上倾斜

linux - 每次启动快照时在 CentOS VM 上启动脚本

linux - Bash 脚本 : edit output of a variable