如何在后台运行Bash函数且仅保留其自身输出?
解决后台运行Bash函数并保留指定位置输出的问题
要实现后台运行你的foo函数,同时让函数里的tput和echo能正常输出到屏幕指定位置,且屏蔽nohup等工具的冗余输出,核心是让函数明确指向当前终端输出,同时处理后台进程的终端关联问题。
具体实现步骤
- 先获取当前终端设备路径,后续让函数输出定向到这个终端:
TTY=$(tty) - 修改函数,将
tput和echo的输出显式指向该终端(确保光标定位和内容输出能正常生效):function foo(){ # 保留你的其他操作逻辑 tput cup 10 13 > "$TTY" echo -e "OUTPUT" > "$TTY" } - 后台运行函数并脱离终端关联(避免终端关闭时进程被强制终止):
foo & disown
替代方案(使用nohup)
如果必须依赖nohup,只需把nohup自身的输出重定向到/dev/null,函数内部的输出已经指定了终端,不受重定向影响:
TTY=$(tty) nohup foo > /dev/null 2>&1 & disown
为什么之前的尝试失败?
默认情况下,后台进程的标准输出/错误会被自动重定向(比如nohup会写入nohup.out),且后台进程会脱离当前终端,导致tput无法获取终端控制信息来定位光标。显式指定终端设备后,函数的输出直接发送到当前终端,同时屏蔽了工具本身的冗余日志。
内容的提问来源于stack exchange,提问作者kukus888
相关产品推荐
相关产品推荐

