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

如何在后台运行Bash函数且仅保留其自身输出?

解决后台运行Bash函数并保留指定位置输出的问题

要实现后台运行你的foo函数,同时让函数里的tput和echo能正常输出到屏幕指定位置,且屏蔽nohup等工具的冗余输出,核心是让函数明确指向当前终端输出,同时处理后台进程的终端关联问题。

具体实现步骤

  1. 先获取当前终端设备路径,后续让函数输出定向到这个终端:
    TTY=$(tty)
    
  2. 修改函数,将tput和echo的输出显式指向该终端(确保光标定位和内容输出能正常生效):
    function foo(){
      # 保留你的其他操作逻辑
      tput cup 10 13 > "$TTY"
      echo -e "OUTPUT" > "$TTY"
    }
    
  3. 后台运行函数并脱离终端关联(避免终端关闭时进程被强制终止):
    foo & disown
    

替代方案(使用nohup)

如果必须依赖nohup,只需把nohup自身的输出重定向到/dev/null,函数内部的输出已经指定了终端,不受重定向影响:

TTY=$(tty)
nohup foo > /dev/null 2>&1 & disown

为什么之前的尝试失败?

默认情况下,后台进程的标准输出/错误会被自动重定向(比如nohup会写入nohup.out),且后台进程会脱离当前终端,导致tput无法获取终端控制信息来定位光标。显式指定终端设备后,函数的输出直接发送到当前终端,同时屏蔽了工具本身的冗余日志。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:23:23