首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在后台运行时挂起作业。

在后台运行时挂起作业。
EN

Stack Overflow用户
提问于 2010-09-28 06:48:35
回答 3查看 594关注 0票数 2

我遇到了一个问题(请参阅手册页这里)。考虑一下这种情况:empty.tcl是一个空文件。在巴什这条线

tclsh empty.tcl &

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

[1]+ Done tclsh empty.tcl

而这条线

rlwrap tclsh empty.tcl &

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

[1]+ Stopped rlwrap tclsh empty.tcl

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

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

也许人们可以建议一种替代方法来替代rlwrap,哪种功能与预期的一样?

EN

回答 3

Stack Overflow用户

发布于 2010-09-28 08:01:44

基本上,你不能这样做,让它发挥作用。问题(从您的角度来看)是,如果您将一个脚本文件参数传递给tclsh,它将执行它,然后退出。要么使用没有进一步参数的rlwrap tclsh (因此它在交互模式下工作),要么使用模拟Tcl的交互式REPL的脚本。这并不难写:

代码语言:javascript
复制
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应该能很好地处理结果。

票数 2
EN

Stack Overflow用户

发布于 2010-09-28 07:00:18

我在bash,rlwrap bash ./t.sh &中也遇到了类似的问题,它通过逃逸解决了这个问题&,rlwrap bash ./t.sh \&

这是不好的,它会通过&作为一个输入参数。

票数 0
EN

Stack Overflow用户

发布于 2010-09-28 21:34:13

任何在后台运行的命令在尝试从stdin (标准输入)读取时就会得到一个SIGTTY (尝试tclsh &)。rlwrap总是从stdin中读取信息,即使‘s包装命令没有这样做。

这是个严重的问题吗?我不这么认为-- rlwrap当然只对从stdin读取的命令有用,而且在后台运行这些命令也没有任何意义,不管是带还是不带重包装。

汉斯·卢布(作者)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3810321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档