有没有办法让后台任务通知终端打印新的提示?

Posted

技术标签:

【中文标题】有没有办法让后台任务通知终端打印新的提示?【英文标题】:Is there a way for a backgrounded task to inform the terminal to print a new prompt? 【发布时间】:2012-11-05 07:08:42 【问题描述】:

我想编写一个可以作为后台任务运行的程序(即my-thing &),并在必要时提供精美的相关输出。

但是,对于打印到终端的后台任务,总是有这个烦人的小进展:

bash-3.2$ my-thing &

bash-3.2$ my-thing & bash-3.2$ -- Hello from my-thing! -- now let me start doing what I do best ... ▏

...请注意,我们现在在光标之前没有提示,更不用说有一个丑陋的错误提示,我的程序在已打印提示时吐出输出。

因此,我想要三件事,其中只有一件我不知道该怎么做:

    检测我的程序是否在后台运行,并相应地更改我的输出/操作(即打印出较少无用的信息;排队进一步的信息以仅在程序再次进入前台时输出;等等) 当突然将信息打印到我们后台运行的终端时,清除提示(如果已存在) 在我完成打印到终端的任何内容后通知终端,以某种方式强制它在我添加的内容下方重新绘制一个新提示

第三个是唯一一个我完全不知道该怎么做的;虽然我对其他两个有所了解,但也欢迎任何链接或建议。

同样值得赞赏的是,链接到任何程序(任何语言/环境)已经具有运行它的模式;因为我可以尝试对他们的实现进行逆向工程/探索。

【问题讨论】:

这个answer 可能对你有帮助。 【参考方案1】:

这对我有用:

echo 'sleep 1; echo; echo hi' > /tmp/hi
chmod +x /tmp/hi
zsh
/tmp/hi &
asdfsadf # type whatever, here.

在 'hi' 得到回显后,zsh 知道用完整的 'asdfasdf' 重新绘制提示。

所以,不足为奇:zsh 比 bash 更好。

【讨论】:

实用知识;但应用不够广泛,无法解决相关问题。 好吧,它解决了 #2 和 #3。至于#1,您可以捕获 SIGTSTP 并使其对输出进行详细说明。不过,仍然存在一些挑战。

以上是关于有没有办法让后台任务通知终端打印新的提示?的主要内容,如果未能解决你的问题,请参考以下文章

如何把linux后台任务调到前台

用于获取通知的通用 Windows 10 应用后台任务计时器

Linux8.8 screen工具

Flutter:来自后台任务的通知导航,没有上下文问题

Centos进程作业管理与计划任务

在没有后台任务的情况下增加徽章值