You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expect脚本因追加输出到nohup.out停滞问题求助

解决Expect脚本中nohup输出重定向问题

问题场景

我首次编写Expect脚本,原本是个简单脚本:

#!/usr/bin/expect

set timeout 200

spawn XXX/bin/PROGRAM

expect "Choose an option ..."
send "1\r"

...

程序包含多个选项,我基于这些选项写的4个类似脚本都正常运行,但其中某个选项在执行到终止若干进程的expect-send代码块时,被spawn的程序抛出以下消息:

nohup: appending output to 'nohup.out'

直接在命令行运行该程序完全无此异常,因此判断问题出在spawn创建的进程输出重定向逻辑上,尝试多种方法均未解决,希望让Expect脚本创建的进程和终端运行表现一致,避免输出被重定向到nohup.out。

可行解决方法

  • 显式设置终端环境变量
    被spawn的程序可能因为检测不到终端类型而触发nohup的默认输出行为,在spawn前设置TERM为终端常用类型(如xterm),让程序认为自己处于真实终端环境:

    set env(TERM) xterm
    spawn XXX/bin/PROGRAM
    
  • 重定向nohup输出到/dev/null
    如果程序内部硬编码调用了nohup,可在spawn时直接重定向其输出,避免生成nohup.out。注意此方法可能影响Expect对程序输出的匹配,需根据脚本逻辑调整:

    spawn XXX/bin/PROGRAM > /dev/null 2>&1
    
  • 模拟终端交互模式
    在执行到出问题的代码块前,切换到interact模式让程序与真实终端交互,完成关键步骤后再回到脚本控制(适合半自动化场景):

    # 在出现问题的步骤前加入
    interact {
        "终止进程的提示文本" { send "确认命令\r"; exp_continue }
        "操作完成提示" { return }
    }
    
  • 绑定输出到真实终端设备
    将程序的标准输出和错误输出指向真实终端设备/dev/tty,模拟命令行运行时的输出环境:

    set env(STDOUT) /dev/tty
    set env(STDERR) /dev/tty
    spawn XXX/bin/PROGRAM
    

内容的提问来源于stack exchange,提问作者Brorx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 02:18:24